Laravel 6.x 使用 Eloquent 和数组 - 避免在 foreach 中查询
Laravel 6.x working with Eloquent and arrays - avoid queries inside foreach
您好,我在整个应用程序的 foreach 循环中有很多 Eloquent 查询,我试图尽可能避免这种做法。
示例:
$statuses = Statuses::get(); // or Statuses::all(); // What's the difference because I use them mixed?
$statusList = [];
foreach ($statuses as $status) {
$statusList[$status->id] = $status->status_title;
} // How do I just get my array of the id => status_title in single Eloquent query?
// Return $statusList to use in my select drop-down...
我在更多领域使用 foreach 来获得我想要的东西,在其中一些领域我可能查询了 10 到 100 次——这是我现在根据不同的 Stack Overflow 答案尝试的方法:
$statuses = $statuses->map->only(['id', 'status_title']);
但这并没有给我我需要的数组格式,我需要一维 [id] => [title] 但是那个给了我列名。来源:
谢谢
谢谢!试试这个给我准确的主键作为数组键和状态标题作为没有列名的值。抱歉,我刚刚意识到这个例子在 foreach 中没有查询。
我还有一个问题不知道该怎么做:现在我想连接一些列,例如:
$statusList = Status::pluck('status_title', 'status_outcome', 'id'));
$array = $statusList->all();
what I'm trying to do is [id] => [status_title . ' ' . status_outcome]
所以基本上我将我的数组键作为主键 ID,并将值作为连接的标题和结果?
请帮助我在使用 ->pluck() 方法时遇到问题:
Statuses::select("CONCAT('status_title', ' - ', 'status_outcome') AS status, id")->pluck('status', 'id')->all();
试图获取数组,但 pluck() 在我的不同查询中表现不同,有时我会出错。我也试图采摘超过 2 列,它给出了一个错误,例如
Statuses::pluck('status_title', 'status_outcome', 'id')->all() I also tried ->get() and ->toArray()
这就是 pluck
方法的用途:
$statusList = Status::pluck('status_title', 'id');
这将为您提供一个 Collection,由 'id' 键入,值 'status_title'。如果您想将 Collection 转换为 array 调用 Collection 上的 all()
:
$array = $statusList->all();
Laravel 6.x Docs - Queries - Retrieving Results - Retrieving A List Of Column Values pluck
此外,您所拥有的不是循环中的任何查询。您正在查询一次,只是在您的示例中迭代结果。
如果您需要使用某些功能(并非所有支持的数据库都有concat
):
$list = Status::selectRaw("concat(status_title, ' - ', status_outcome) as con, id")
->pluck('con', 'id');
使用 mysql concat() 和 pluck() Laravel Helper 可以实现您想要的效果:
$statuses = Statuses::select("CONCAT('status_title', ' ', 'status_outcome') AS status, id")->get()->pluck('status', 'id');
您好,我在整个应用程序的 foreach 循环中有很多 Eloquent 查询,我试图尽可能避免这种做法。
示例:
$statuses = Statuses::get(); // or Statuses::all(); // What's the difference because I use them mixed?
$statusList = [];
foreach ($statuses as $status) {
$statusList[$status->id] = $status->status_title;
} // How do I just get my array of the id => status_title in single Eloquent query?
// Return $statusList to use in my select drop-down...
我在更多领域使用 foreach 来获得我想要的东西,在其中一些领域我可能查询了 10 到 100 次——这是我现在根据不同的 Stack Overflow 答案尝试的方法:
$statuses = $statuses->map->only(['id', 'status_title']);
但这并没有给我我需要的数组格式,我需要一维 [id] => [title] 但是那个给了我列名。来源:
谢谢
谢谢!试试这个给我准确的主键作为数组键和状态标题作为没有列名的值。抱歉,我刚刚意识到这个例子在 foreach 中没有查询。
我还有一个问题不知道该怎么做:现在我想连接一些列,例如:
$statusList = Status::pluck('status_title', 'status_outcome', 'id'));
$array = $statusList->all();
what I'm trying to do is [id] => [status_title . ' ' . status_outcome]
所以基本上我将我的数组键作为主键 ID,并将值作为连接的标题和结果?
请帮助我在使用 ->pluck() 方法时遇到问题:
Statuses::select("CONCAT('status_title', ' - ', 'status_outcome') AS status, id")->pluck('status', 'id')->all();
试图获取数组,但 pluck() 在我的不同查询中表现不同,有时我会出错。我也试图采摘超过 2 列,它给出了一个错误,例如
Statuses::pluck('status_title', 'status_outcome', 'id')->all() I also tried ->get() and ->toArray()
这就是 pluck
方法的用途:
$statusList = Status::pluck('status_title', 'id');
这将为您提供一个 Collection,由 'id' 键入,值 'status_title'。如果您想将 Collection 转换为 array 调用 Collection 上的 all()
:
$array = $statusList->all();
Laravel 6.x Docs - Queries - Retrieving Results - Retrieving A List Of Column Values pluck
此外,您所拥有的不是循环中的任何查询。您正在查询一次,只是在您的示例中迭代结果。
如果您需要使用某些功能(并非所有支持的数据库都有concat
):
$list = Status::selectRaw("concat(status_title, ' - ', status_outcome) as con, id")
->pluck('con', 'id');
使用 mysql concat() 和 pluck() Laravel Helper 可以实现您想要的效果:
$statuses = Statuses::select("CONCAT('status_title', ' ', 'status_outcome') AS status, id")->get()->pluck('status', 'id');