我的数据库中有两个表 - 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
请指导我如何解决我现在面临的这两个问题.
你的关系应该是这样的:
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)