【发布时间】:2015-01-23 20:39:39
【问题描述】:
是否可以使用单独的 ID 数组订购关系集合,同时仍通过关系进行访问?
设置为Checklist 有许多ChecklistItems,并且相关项目的所需顺序作为属性Checklist::$item_order 存在。它只是按用户所需顺序排列的数字 ID 数组。
:
class Checklist extends Model {
protected $casts = ['item_order' => 'array'];
public function items() {
return $this->hasMany(ChecklistItem::class);
}
}
class ChecklistItem extends Model {
public function list() {
return $this->belongsTo(Checklist::class);
}
}
我以正常方式访问此关系:
$list = Checklist::find(1234);
foreach ($list->items as $item) {
// More Code Here
}
有没有可行的方法根据$list->item_order 数组中的值对$list->items 进行排序?
(我不能只在“项目”表中添加一个“订单”列,因为每个“列表”的订单都会发生变化。)
【问题讨论】:
-
我不知道你会如何在 laravel 中做到这一点,但我知道在直接的 mysql 查询中,如果你想要按预定义顺序排序的东西,你可以使用
field或 @ 987654329@ 作为您订单的一部分,并以您想要的任何顺序列出值。或者,您可以在选择(或顺序)中使用 case 语句,按该列返回数字和顺序。除非 laravel 有其他方法,否则我能想到的唯一其他方法是将项目存储在一个数组中并使用您的 id 数组进行排序以获得所需的顺序。 -
@Matthew Brown
$list->item_order是有序的项目 ID 数组?? -
@voodoo417 是的,这是正确的
标签: php laravel eloquent-relationship