0

嗨,我的应用程序中的 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] 但是那个给我列名。来源:仅从 Laravel 集合中获取特定属性

谢谢

谢谢!尝试这个给了我主键作为数组键和状态标题作为没有列名的值。抱歉,我刚刚意识到这个示例在 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()
4

2 回答 2

1

这就是该pluck方法的用途:

$statusList = Status::pluck('status_title', 'id');

这将为您提供一个以“id”为键的集合,并以“status_title”作为值。如果您想将该 Collection 转换Collection上的数组调用:all()

$array = $statusList->all();

Laravel 6.x 文档 - 查询 - 检索结果 - 检索列值列表 pluck

此外,您所拥有的也不是循环中的任何查询。您正在查询一次,并且只是在您的示例中迭代结果。


如果您需要使用某些功能(并非所有支持的数据库都有concat):

$list = Status::selectRaw("concat(status_title, ' - ', status_outcome) as con, id")
    ->pluck('con', 'id');
于 2019-12-19T14:08:22.640 回答
0

使用 mysql concat() 和 pluck() Laravel Helper 可以达到你想要的效果:

$statuses = Statuses::select("CONCAT('status_title', ' ', 'status_outcome') AS status, id")->get()->pluck('status', 'id');
于 2019-12-19T14:37:57.793 回答