Php Laravel:搜索与条件的关系并检索记录
我在学校数据库中有一些相关的表。我有学生、StdAct和交易记录。学生每年有一个帐户。因此,一个学生可能有很多账户(基于年份和年级)。例如:学生(id:2)可能有以下帐户Php Laravel:搜索与条件的关系并检索记录,php,laravel,eloquent,laravel-query-builder,Php,Laravel,Eloquent,Laravel Query Builder,我在学校数据库中有一些相关的表。我有学生、StdAct和交易记录。学生每年有一个帐户。因此,一个学生可能有很多账户(基于年份和年级)。例如:学生(id:2)可能有以下帐户 StdAct(学号:10,学号:2,学年:2018,年级:10) StdAct(学号:23,学号:2,学年:2019,年级:11) StdAct(学号:53,学号:2,学年:2020,年级:12)。。等等 StdAct可能有许多事务。例如,StdAct(id:10,年份:2018,等级:10)可能有以下交易: Tran(
- StdAct(学号:10,学号:2,学年:2018,年级:10)
- StdAct(学号:23,学号:2,学年:2019,年级:11)
- StdAct(学号:53,学号:2,学年:2020,年级:12)。。等等
- Tran(id:110,act\u id:10,金额:20美元,创建时间:2020-10-10)
- Tran(id:340,act\u id:10,金额:40美元,创建时间:2020-11-10)。。等等
- 1约翰20美元2020-10-10
- 2约翰40美元2020-11-10
- 3丹尼斯44美元2020-11-02
类StdActs扩展模型
{
//
受保护的$table='StdActs';
公共职能学生()
{
返回$this->belongsTo('App\Students','student\u id');
//返回$this->belongsTo('App\Students','id');
}
公共职能事务()
{
返回$this->hasMany('App\Transactions','act\u id');
}
}
班级学生扩展模型
{
受保护的$table='Students';
公共功能StdActs()
{
返回$this->hasMany('App\StdActs','student_id','id');
}
}
类事务扩展模型
{
受保护的$table='事务';
公共功能StdAct()
{
返回$this->belongsTo('App\StdActs');
}
}
注:
我试过一些类似的案例(但不是我上面所问的案例),如下所示:
$stdActs=stdActs::whereHas('student',函数($query){
$query->where('std_name','like','%'。请求('keywords')。%');
})
->其中('year_id','=',请求('year'))
->其中('school_id','=',request('school'))
->get();
但是,它只返回StdActs。。没有学生的名字。。
如果可以在此处获取std_名称;然后我认为我们可以解决原始问题。您的原始查询被
whereHas()
限制为满足要求的StdActs
的实例,但您不要求处理关系。这是使用with()
方法完成的,然后我们将使用与前面相同的需求
$stdActs=stdActs::whereHas('student',函数($query){
$query->where('std_name','like','%'。请求('keywords')。%');
})
->其中('year_id','=',request('year'))
->其中('school_id','=',request('school'))
->与(
[
'student'=>函数($query){
$query->where('std_name','like','%'。请求('keywords')。%');
}
]
)
->get();
您的原始查询受whereHas()
限制,仅限于满足要求的StdActs
实例,但您不要求建立关系。这是使用with()
方法完成的,然后我们将使用与前面相同的需求
$stdActs=stdActs::whereHas('student',函数($query){
$query->where('std_name','like','%'。请求('keywords')。%');
})
->其中('year_id','=',request('year'))
->其中('school_id','=',request('school'))
->与(
[
'student'=>函数($query){
$query->where('std_name','like','%'。请求('keywords')。%');
}
]
)
->get();
非常感谢@miken32!。它很好用。我添加了一些代码来从“student”表中选择一些列。以下是我所拥有的:->with(['student'=>function($query){$query->where('std_name','like','%'。request('keywords')。%');}])->with('student:id,std_name')非常感谢@miken32!。它很好用。我添加了一些代码来从“student”表中选择一些列。以下是我所拥有的:->with(['student'=>function($query){$query->where('std_name','like','%'。request('keywords')。%');}])->with('student:id,std_name'))