在mysql中连接两个表

Con*_*nor 5 php mysql laravel

我的数据库中有两个表 - vnames和vtypes
vtypes有一个名称字段和一个id字段,vnames有一个id字段,name字段和一个vtypes_id字段,它是一个外键连接字段.它与vtypes中的id字段相关联.

我有Vname和Vtype型号 -

VNAME

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Vname extends Model
{
    public function vtype() {
        return $this->belongsTo('App\Vtype');
    }
}
Run Code Online (Sandbox Code Playgroud)

V型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Vtype extends Model
{
    public function vname() {
        return $this->hasMany('App\Vtype');
    }
}
Run Code Online (Sandbox Code Playgroud)

当我删除vtype表中的任何列时,我想删除与之关联的所有vname列.我找到了这样的解决方案 -

public function vtypeDestroy($id) {
    $vtype = Vtype::find($id);
    $vtype->vname()->detach();
    $vtype->delete();

    Session::flash('success', 'The vtype was successfully deleted');
    return redirect('/vtypes');
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个功能时,我得到一个像这样的错误 - Call to undefined method Illuminate\Database\Query\Builder::detach()

我该如何解决?

当我想从vname获取vtype的名称时,我无法做到.我试过这样的

@foreach ($vnames as $vname)
    {{ $vname->vtype()->name }}
@endforeach
Run Code Online (Sandbox Code Playgroud)

在一个视图中

但是我得到了这样的错误 - Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$name

请指导我如何解决我现在面临的这两个问题.

Ami*_*pta 2

你的关系应该是这样的:

Vname 型号

class Vname extends Model
{
  public function vtype() {
        return $this->belongsTo('App\Vtype', 'vtypes_id', 'id');
  }
}
Run Code Online (Sandbox Code Playgroud)

V型

class Vtype extends Model
{
    public function vname() {
        return $this->hasMany('App\Vname', 'vtypes_id', 'id');
    }
}
Run Code Online (Sandbox Code Playgroud)

然后您可以使用delete方法删除关系,如下所示:

$vtype = Vtype::find($id);
$vtype->vname()->delete();
$vtype->delete();
Run Code Online (Sandbox Code Playgroud)

在你看来,它应该是这样的:

@foreach ($vnames as $vname)
    {{ $vname->vtype->name }}
@endforeach
Run Code Online (Sandbox Code Playgroud)

文档