我的数据库中有两个表 - vnames 和 vtypes
vtypes 有一个 name 字段和一个 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');
}
}
V型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Vtype extends Model
{
public function vname() {
return $this->hasMany('App\Vtype');
}
}
当我删除 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');
}
但是当我运行这个函数时,我得到了这样的错误 - Call to undefined method Illuminate\Database\Query\Builder::detach()
我该如何解决?
当我想从 vname 获取 vtype 的名称时,我做不到。我试过这样
@foreach ($vnames as $vname)
{{ $vname->vtype()->name }}
@endforeach
在 View 中
但我遇到了这样的错误 -- Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$name
请指导我如何解决我现在面临的这两个问题。
最佳答案
你的关系应该是:
Vname 模型
class Vname extends Model
{
public function vtype() {
return $this->belongsTo('App\Vtype', 'vtypes_id', 'id');
}
}
V型
class Vtype extends Model
{
public function vname() {
return $this->hasMany('App\Vname', 'vtypes_id', 'id');
}
}
然后你可以使用delete
方法来删除关系:
$vtype = Vtype::find($id);
$vtype->vname()->delete();
$vtype->delete();
在你看来应该是:
@foreach ($vnames as $vname)
{{ $vname->vtype->name }}
@endforeach
关于php - 连接mysql中的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41254891/