laravel雄辩的关系查询

时间:2014-08-14 07:52:25

标签: php laravel

我有两张桌子1)用户 {id,密码}
2)专业知识{id,expertise}

我的关系是

模型

Expertise.php

function User()
{

  $this->hasOne('Expertise');

}

User.php

 function Expertise()
 {
  $this->hasOne('User');

 }

那么如何使用Eloquent查询前10位具有一定专业知识的用户呢? 我想加入users.id = expertise.id并获得具有指定专业知识的前10个人(Where子句)。

初学者到laravel,我已检查过其他来源但未成功

1 个答案:

答案 0 :(得分:3)

目前,您对数据建模方式存在问题。如果你有一对一的关系,那么建模它的最佳做法是让一个实体存储另一个实体的id。 Laravel的惯例是有一个名为<model>_id的列:

Users
| id | password |

Expertises
| id | expertise | user_id |

然后在你的模特中你可以这样做:

模型

Expertise.php

class Expertise extends Eloquent
{

    public function User()
    {
          // because expertise has a column user_id
          // expertise belongs to user
          return $this->belongsTo('User');
    }

}

user.php的

class User extends Eloquent
{

     public function Expertise()
     {
          // because expertise is the one with the column 
          // user_id, user has one expertise
          return $this->hasOne('Expertise');
     }
}

查询

完成所有这些设置后,为了能够查询具有一定专业知识的前10位用户,您可以执行此操作。

$users = User::whereHas('Expertise', function($q)
         {
               $q->where('expertise', '=', <expertise you are looking for>)
         })
          ->take(10)
          ->get();

要进一步阅读在Laravel中查询关系,请看一下:

Laravel - Querying Relationships

请记住

请记住,表名必须是复数,否则你应该在模型中指定表的名称:

protected $table = 'expertise';