Laravel - 按标题搜索?
Laravel - search by title?
如何只在ServiceType
中按title
搜索? Package
中还有一个 title 字段,应该避免
例如,在模型中:
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
中有一个service_type_id字段,在serviceType
中有title
字段
在控制器中:
$packages = Package::getPackagesByServiceType('something')->get();
由于某种原因没有出现结果?它应该在 serviceType
中搜索 something
with()
和 where()
组合起来好像不行。当我删除 where()
并且它起作用时。
->get()
应该在模型中
public static function getPackagesByServiceType($service)
{
return Package::with('serviceType')->where('title', '=', $service)->get(); // here
}
在控制器中应该是这样的:
$packages = Package::getPackagesByServiceType('something');
希望对您有所帮助...我在模型 - 控制器结构中遇到了类似的问题....
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();
您不能像那样使用 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();
如何只在ServiceType
中按title
搜索? Package
中还有一个 title 字段,应该避免
例如,在模型中:
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
中有一个service_type_id字段,在serviceType
title
字段
在控制器中:
$packages = Package::getPackagesByServiceType('something')->get();
由于某种原因没有出现结果?它应该在 serviceType
something
with()
和 where()
组合起来好像不行。当我删除 where()
并且它起作用时。
->get()
应该在模型中
public static function getPackagesByServiceType($service)
{
return Package::with('serviceType')->where('title', '=', $service)->get(); // here
}
在控制器中应该是这样的:
$packages = Package::getPackagesByServiceType('something');
希望对您有所帮助...我在模型 - 控制器结构中遇到了类似的问题....
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();
您不能像那样使用 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();