如何仅通过title
中的ServiceType
进行搜索? Package
中还有一个应该避免的标题字段
例如,在模型中:
class Package extends Eloquent {
protected $table = 'package';
function serviceType()
{
return $this->belongsTo('ServiceType');
}
public static function getPackagesByServiceType($service)
{
return Package::with('serviceType')->where('title', '=', $service);
}
}
注意:
Package
id
和title
,serviceType
字段中有service_type_id字段
在控制器中:
$packages = Package::getPackagesByServiceType('something')->get();
由于某种原因没有出现结果?它应该在something
serviceType
似乎将with()
和where()
结合起来并不起作用。当我删除where()
并且它可以正常工作时。
答案 0 :(得分:1)
您不能使用此类where()
按相关模型进行过滤。您应该使用whereHas()
代替:
public static function getPackagesByServiceType($service)
{
return Package::with('serviceType')->whereHas('serviceType', function($q) use ($service){
$q->where('title', '=', $service);
});
}
请注意,如果您之后不需要serviceType
,则不必急于加载它,因此您可以删除with('serviceType')
此外,如果您在控制器中拨打get()
,则应使用query scope。它提供相同的功能,但它不是静态功能,它是 Laravel方式
public function scopeByServiceType($query, $service){
return $query->with('serviceType')->whereHas('serviceType', function($q) use ($service){
$q->where('title', '=', $service);
});
}
你这样使用它:
$packages = Package::byServiceType('something')->get();
答案 1 :(得分:-2)
->get()
应该在模型中
public static function getPackagesByServiceType($service)
{
return Package::with('serviceType')->where('title', '=', $service)->get(); // here
}
在控制器中它应该是这样的:
$packages = Package::getPackagesByServiceType('something');
希望有所帮助......我的模型 - 控制器结构中存在类似问题......
答案 2 :(得分:-2)
class Package extends Eloquent {
protected $table = 'package';
function serviceType()
{
return $this->belongsTo('ServiceType');
}
public static function getPackagesByServiceType($service)
{
return Package::with('serviceType')->where('title', '=', $service)->get();
}
}
你忘记了 - > get();