Laravel,雄辩的 n:m 关系
Posted
技术标签:
【中文标题】Laravel,雄辩的 n:m 关系【英文标题】:Laravel, Eloquent n:m relationship 【发布时间】:2015-10-07 15:45:36 【问题描述】:我尝试使用 Eloquent 在 Laravel 中定义一个 n:m 关系。我有以下表格:
用户:
身份证 富事情
身份证users_things
thing_id 富在我的User
模型中,我定义了以下关系
public function things()
return $this->hasMany('App\Thing', 'user_things', 'foo', 'thing_id');
在Things
模型中是对应的
public function users()
return $this->hasMany('App\User', 'user_things', 'thing_id', 'foo');
当我调用控制器时
$user = User::find(1) //works
//$thing = Thing::find(1) works
$things = $user->things();
return $things
我收到以下消息:
类 Illuminate\Database\Eloquent\Relations\HasMany 的对象可以 不转换为字符串。
我的问题是,我不能使用 User ID
作为组合表中的外键。它必须是foo
列。
【问题讨论】:
该错误似乎与关系无关。在您的代码中的某处,一个对象被转换为一个字符串。看一下错误信息,应该有错误发生的文件名和行号。请粘贴这部分代码。 当你return dd($things)?
$user->things()` 返回一个 Collection 实例时会发生什么。改用动态属性,看看是否有效:$things = $user->things;
或 $things = $user->things->first();
【参考方案1】:
您可以试试这个(使用belongsToMany
表示many-to-many
关系):
// User.php
protected $primaryKey = 'foo';
public $incrementing = false;
public function things()
return $this->belongsToMany('App\Thing', 'user_things', 'foo', 'thing_id');
// Thing.php
public function users()
return $this->belongsToMany('App\User', 'user_things', 'thing_id', 'foo');
最后,使用$user->things
代替$user->things()
。
【讨论】:
以上是关于Laravel,雄辩的 n:m 关系的主要内容,如果未能解决你的问题,请参考以下文章