首页 文章

属性[]不存在属于许多枢轴关系

提问于
浏览
-1

在使用属于很多关系时,我似乎无法获得我的枢轴关系!我的结构看起来像这样

user Model

class Users extends Model
{

    protected $table = 'users';

    public function contacts(){
        return $this->belongsToMany('App\Models\Contacts', 'user_contacts', 'user_id', 'contact_id');
    }

}

contacts Model

class Contacts extends Model
{
    protected $table = 'contacts';
}

user_contacts Table

id | user_id | contact_id
1  |       1 |        1

users Table

id | Name 
1  | Jim Bliggs

contacts Table

id | Name       | Telephone
1  | Joe Bloggs | 0 111 1111

我可以像这样保存关系

$user->contacts()->save($newContact);

但每当我试图让用户的所有联系人像这样循环通过它们

$users = Users::all();
dd($users->contacts);

它只是回来了

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

对不起,如果它是一个简单的问题,但我无法理解我如何使用这种关系创建,但我无法阅读?

2 回答

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

相关问题