Laravel表关系

时间:2013-12-19 07:35:50

标签: php database laravel-4

我有3张桌子:

users
leads
users_leads

users表上:

---------------
-- id | name --
-- 1  | doe  --
-- 2  | joe  --
---------------

leads表上:

----------------
-- id | type  --
-- 1  | house --
-- 2  | condo --
-- 3  | house --
----------------

users_leads表上:

----------------------------
-- id | user_id | lead_id --
-- 1  | 1       | 1       --
-- 1  | 1       | 2       --
-- 1  | 2       | 3       --
----------------------------

然后我有我的模特:

User.php
Lead.php
UsersLead.php

在model / UsersLead.php上

class UsersLead extends Eloquent {
   public function leads()
   {
      return $this->belongsTo('Lead');
   }
}

在model / Lead.php上

class Lead extends Eloquent {
   public function userslead()
   {
      return $this->hasMany('UsersLead');
   }
}

然后我试着运行它:

$data = Lead::all()->userslead;

Laravel抛出了这个错误:

Undefined property: Illuminate\Database\Eloquent\Collection::$userslead

如何使用雄辩的ORM运行查询。获得属于特定用户的所有潜在客户?

任何人都可以提供帮助?感谢。

2 个答案:

答案 0 :(得分:5)

你需要多对多的关系:

在您的用户模型中:

class User extends Eloquent {

    public function leads()
    {
        return $this->belongsToMany('Lead');
    }

}

在您的潜在客户模型中

class Lead extends Eloquent {

    public function users()
    {
        return $this->belongsToMany('User');
    }

}

然后从您的控制器 利用多对多的关系。

$leads = User::find(1)->leads;

重要:

此关系需要三个数据库表:usersleadslead_userlead_user表来自相关模型名称的字母顺序,应该有user_idlead_id列。

参考:

http://laravel.com/docs/eloquent#many-to-many

迭代项目

foreach ($leads as $lead)
{
    dd($lead);
}

更多信息:

http://laravel.com/docs/eloquent#working-with-pivot-tables

答案 1 :(得分:1)

如果您想获得所有用户线索:

$data = Lead::with('userslead')->get();

为了获取特定用户的数据,您应该通过ID来引用它:

$data = Lead::find($id)->userslead;