首页 > 解决方案 > 属性 [] 不存在于属于多个枢轴关系

问题描述

使用属于多个关系时,我似乎无法获得我的支点关系!我的结构看起来像这样

用户模型

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);

它只是返回

此集合实例上不存在属性 [Contacts]。

抱歉,如果这是一个简单的问题,但我不明白如何使用这种关系创建但我看不懂?

标签: phplaravellaravel-5

解决方案


您应该在 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

推荐阅读