属性[]不存在于属于多个支点关系

时间:2018-07-03 09:03:55

标签: php laravel laravel-5

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

用户模型

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

它只是返回

  

此集合实例上不存在属性[联系人]。

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

2 个答案:

答案 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);
}