Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 属于多个透视关系的上不存在属性[]_Php_Laravel_Laravel 5 - Fatal编程技术网

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
,会发生什么情况?请解释一下为什么要定义反向联系人模型?这只是为了练习吗?如果我只想通过用户模型访问联系人,它还需要定义吗?我认为这是一个很好的实践,但是,如果你从不通过联系人访问用户,那么你就不需要它了。如果你碰巧是一个支持我这个答案的人,你能解释一下为什么吗?