我有两个表
1)用户{id, password}
2)expertise {id, expertise}
我的关系是
Expertise.php
function User()
{
$this->hasOne('Expertise');
}
User.php
function Expertise()
{
$this->hasOne('User');
}
那么我如何使用Eloquent查询获得具有特定专业知识的前10个用户呢?我想加入用户。Id =专长。id并获得前10个具有指定专业知识的人(Where子句)。
初学者到laravel,我已经检查了其他来源,但没有成功
现在您对数据建模的方式有问题。如果您有一个一对一的关系,那么建模的最佳实践是让一个实体存储另一个实体的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 -查询关系
Keep in mind
请记住,表名必须是复数,如果不是,那么您应该在模型中指定表名:
protected $table = 'expertise';