猿问

在 Laravel 查询生成器中将自定义集合添加到 eloquent 中

我有一个查询,我想使用 Laravel 查询生成器添加一个集合。


Hotel::addSelect([

   'selectableLocations' => AllLocations::orderBy('name')->get()

])

  ->with('location')

  ->get();

好吧,这返回:


[{"id":1,"name":"John Avenue"},{"id":4,"name":"Ontirio Village"},{"id":2,"name":"Rovie"},{"id":3,"name":"Movie Lot"}]SQLSTATE[HY093]:无效的参数号:混合命名和位置参数(SQL:从限制 100 偏移量 0中选择dogs)


我知道这可能看起来像反模式,但我需要这个的原因是因为我有一个数据表,并且想要显示带有 AllLocations 的选择(下拉列表),以便用户可以在数据表中进行更改。


我的想法是我可以$dog->selectableLocations看到所有位置。因为如果我不这样做,它将单独查询每一行。


有没有办法做到这一点?


如果我能达到这样的境界,那就完美了。


$selectableLocations = AllLocations::get();


$hotels = Hotel::addSelect([

    'selectableLocations' => $selectableLocations

])

  ->with('location')

  ->get();


拉莫斯之舞
浏览 131回答 1
1回答

MMTTMM

编辑:因为如果我不这样做,它将单独查询每一行。由于您主要关心的是多个查询,因此如果您实现某种缓存,则可以避免数据库调用。为什么不将列表包含为自定义属性,从缓存加载集合?就像这样: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 的集合。
随时随地看视频慕课网APP
我要回答