当我使用属于多个关系时,我似乎无法获得我的关键关系!我的结构看起来像这样
用户模型
class Users extends Model
{
protected $table = 'users';
public function contacts(){
return $this->belongsToMany('App\Models\Contacts', 'user_contacts', 'user_id', 'contact_id');
}
}
联系人模型
class Contacts extends Model
{
protected $table = 'contacts';
}
user_contacts表
id | user_id | contact_id
1 | 1 | 1
用户表
id | Name
1 | Jim Bliggs
联系人表
id | Name | Telephone
1 | Joe Bloggs | 0 111 1111
我可以很好地使用这种关系来保存
$user->contacts()->save($newContact);
但是每当我尝试获取所有联系人以供用户像这样遍历它们
$users = Users::all();
dd($users->contacts);
它只是返回
此集合实例上不存在属性[联系人]。
很抱歉,如果这是一个简单的问题,但是我不明白如何使用关系创建但我却看不懂?
答案 0 :(得分:1)
您应定义Contact模型的逆模型:
class Contacts extends Model
{
protected $table = 'contacts';
public function users(){
return $this->belongsToMany('App\Models\Users', 'user_contacts', 'contact_id', 'user_id');
}
}
要访问用户联系人,您需要循环收集:
foreach ($users as $user) {
// $user->contacts
}
// using higher order proxy
$users->each->contacts
答案 1 :(得分:0)
$users = Users::all();
将返回一组用户,您需要遍历用户以获取与其相关的联系人
foreach ($users as $user) {
dump($user->contacts);
}
要缓解N + 1查询问题,您可以eager load用户的联系人
$users = User::with('contacts')->get();
foreach ($users as $user) {
dump($user->contacts);
}