Php 属于多个透视关系的上不存在属性[]
当使用“属于多个关系”时,我似乎无法获得我的轴心关系!我的结构是这样的Php 属于多个透视关系的上不存在属性[],php,laravel,laravel-5,Php,Laravel,Laravel 5,当使用“属于多个关系”时,我似乎无法获得我的轴心关系!我的结构是这样的 $users = Users::all(); dd($users->contacts); 用户模型 class Users extends Model { protected $table = 'users'; public function contacts(){ return $this->belongsToMany('App\Models\Contacts', 'use
$users = Users::all();
dd($users->contacts);
用户模型
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';
}
联系人型号
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';
}
用户联系人表
id | user_id | contact_id
1 | 1 | 1
id | Name
1 | Jim Bliggs
id | Name | Telephone
1 | Joe Bloggs | 0 111 1111
用户表
id | user_id | contact_id
1 | 1 | 1
id | Name
1 | Jim Bliggs
id | Name | Telephone
1 | Joe Bloggs | 0 111 1111
联系人表
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);
它刚刚回来
此集合实例上不存在属性[Contacts]
抱歉,如果这是一个简单的问题,但我无法理解如何使用关系创建,但我无法阅读?您应该在联系人模型上定义反向:
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
将返回一个用户集合,您需要通过用户循环,以获取其关联的联系人
foreach ($users as $user) {
dump($user->contacts);
}
为了缓解N+1查询问题,您可以访问用户的联系人
$users = User::with('contacts')->get();
foreach ($users as $user) {
dump($user->contacts);
}
如果将
()
添加到那些$users->contacts
,会发生什么情况?请解释一下为什么要定义反向联系人模型?这只是为了练习吗?如果我只想通过用户模型访问联系人,它还需要定义吗?我认为这是一个很好的实践,但是,如果你从不通过联系人访问用户,那么你就不需要它了。如果你碰巧是一个支持我这个答案的人,你能解释一下为什么吗?