将自定义集合添加到 Laravel 查询生成器中的 eloquent
Adding custom collection to the eloquent within Laravel Query Builder
我有一个查询,我想使用 Laravel 查询生成器添加一个集合。
Hotel::addSelect([
'selectableLocations' => AllLocations::orderBy('name')->get()
])
->with('location')
->get();
嗯,这个returns:
SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters (SQL: select [{"id":1,"name":"John Avenue"},{"id":4,"name":"Ontirio Village"},{"id":2,"name":"Rovie"},{"id":3,"name":"Movie Lot"}]
from dogs
limit 100 offset 0)
我知道这可能看起来像是一种反模式,但我需要它的原因是因为我有一个数据表并且想显示一个带有 AllLocations 的 select(下拉列表),以便用户可以在数据表中进行更改.
我的想法是我可以 $dog->selectableLocations
查看所有位置。因为如果我不这样做,它会单独查询每一行。
有办法吗?
要是能做到这样就完美了
$selectableLocations = AllLocations::get();
$hotels = Hotel::addSelect([
'selectableLocations' => $selectableLocations
])
->with('location')
->get();
编辑:
Because if I don't do it like this, it will query for each row individually.
由于您主要关心的是多个查询,如果您实施某种缓存,则可以避免数据库调用。为什么不将列表作为自定义属性包括在内,从缓存中加载集合?像这样:
public function getAllLocationsAttribute()
{
return Cache::remember('all_locations', 30, function(){ //add remove seconds as required
return AllLocatiobs::get();
});
}
合并这两个集合怎么样?
$hotels = Hotel::get();
$selectableLocations = AllLocations::get();
$hotels->put('selectableLocations', $selectableLocations);
现在,$hotels->selectableLocations
将是 AllLocations 的集合。
我有一个查询,我想使用 Laravel 查询生成器添加一个集合。
Hotel::addSelect([
'selectableLocations' => AllLocations::orderBy('name')->get()
])
->with('location')
->get();
嗯,这个returns:
SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters (SQL: select
[{"id":1,"name":"John Avenue"},{"id":4,"name":"Ontirio Village"},{"id":2,"name":"Rovie"},{"id":3,"name":"Movie Lot"}]
fromdogs
limit 100 offset 0)
我知道这可能看起来像是一种反模式,但我需要它的原因是因为我有一个数据表并且想显示一个带有 AllLocations 的 select(下拉列表),以便用户可以在数据表中进行更改.
我的想法是我可以 $dog->selectableLocations
查看所有位置。因为如果我不这样做,它会单独查询每一行。
有办法吗?
要是能做到这样就完美了
$selectableLocations = AllLocations::get();
$hotels = Hotel::addSelect([
'selectableLocations' => $selectableLocations
])
->with('location')
->get();
编辑:
Because if I don't do it like this, it will query for each row individually.
由于您主要关心的是多个查询,如果您实施某种缓存,则可以避免数据库调用。为什么不将列表作为自定义属性包括在内,从缓存中加载集合?像这样:
public function getAllLocationsAttribute()
{
return Cache::remember('all_locations', 30, function(){ //add remove seconds as required
return AllLocatiobs::get();
});
}
合并这两个集合怎么样?
$hotels = Hotel::get();
$selectableLocations = AllLocations::get();
$hotels->put('selectableLocations', $selectableLocations);
现在,$hotels->selectableLocations
将是 AllLocations 的集合。