我想将我的 laravel 数据库查询更改为从数据库搜索数据的模型关系查询

I want to change my laravel database query to model relationship query for search data from database

我正在学习 laravel Eloquent 关系,我成功地为 eq city belongsTo State 和 belongsTo country 创建了模型之间的关系。

public function state(){

    return $this->belongsTo(State::class,'state_id', 'sr_id');
}

public function country(){

    return $this->belongsTo(Country::class,'country_id', 'sr_id');
}

这是我以前的搜索代码,我想知道我们如何使用模型关系方法搜索数据,我们如何从它们的后面调用每一列 table。

$city = city::leftjoin('master_country','master_country.sr_id','=','master_city.country_id')
         ->leftjoin('master_state','master_state.sr_id','=','master_city.state_id')
         ->where('master_city.sr_status',0)
         ->where('master_city.sr_id','LIKE','%'.$query.'%')
         ->orWhere('master_city.sr_name','LIKE','%'.$query.'%')
         ->orWhere('master_city.city_tel_code','LIKE','%'.$query.'%')
         ->orWhere('master_country.sr_name','LIKE','%'.$query.'%')
         ->orWhere('master_state.sr_name','LIKE','%'.$query.'%')
         ->orderBy('master_city.sr_id')
         ->paginate(3,array('master_city.*','master_country.sr_name AS c_name','master_state.sr_name As s_name')); 

所以我们希望..

City::with('state','country')->where etc 

你可以看看Constraining Eager Loads

$cities = City::with(
    [
        'state' => function ($query) {
            $query->where('state_column', 'some_value');
        },
        'country' => function ($query) {
            $query->where('country_column', 'some_value');
        }
    ]
)->get();

如果不想检索关系数据,可以使用whereHas()方法:

City::whereHas('state', fn (Builder $builder) => $builder->where('state_column', 'some_value')));

不需要使用箭头函数。

More documentation on this