为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
拉莫斯之舞 2023-10-15 17:28:34
我有一个查询,我想使用 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();
查看完整描述

1 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

编辑:


因为如果我不这样做,它将单独查询每一行。


由于您主要关心的是多个查询,因此如果您实现某种缓存,则可以避免数据库调用。为什么不将列表包含为自定义属性,从缓存加载集合?就像这样:


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 的集合。


查看完整回答
反对 回复 2023-10-15
  • 1 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信