Laravel:通过标签从集合中获取模型

时间:2018-08-22 06:27:38

标签: php mysql laravel eloquent

我目前正在处理一个页面,以选择一个菜单来订购下个工作日。 您可以在菜单1和菜单2之间进行选择。

为此,我制作了一个名为Menu的模型,在其中查询了本周的不同菜单。

$menus1 = Menu::where('date', '>=', $start->toDateString())
                ->where('date', '<=', $end->toDateString())
                ->where('menu_nr', '=', '1')
                ->orderByRaw('date asc')
                ->get();

$menus2 = Menu::where('date', '>=', $start->toDateString())
                ->where('date', '<=', $end->toDateString())
                ->where('menu_nr', '=', '2')
                ->orderByRaw('date asc')
                ->get();

现在我有2个菜单模型集合。我们的目标是在网页上再次查询该集合,并在其中显示模型的数据。

例如:

$menus1->where('date',$date)->starter_name;
$menus1->where('date',$date)->main_name;

现在我遇到了问题,我无法解决它们。它总是返回一个空的Collection。

3 个答案:

答案 0 :(得分:1)

我刚刚意识到,我需要将“日期”列与“碳日期”进行比较,因为数据类型为“日期”。

所以我做到了:

$menu = $menus1->where('date', \Carbon\Carbon::parse($date))->first();

首先,因为ther仅仅是一个。 现在我可以通过以下方式获取数据:

$menu->starter_name
$menu->main_name

答案 1 :(得分:0)

u正在尝试从集合中获取一项,请尝试以下操作:

$menus1->where('date',$date)->first()->starter_name;

看看Laravel Collection Docs

答案 2 :(得分:0)

由于您正在使用Laravel的get()方法,因此应该循环浏览菜单。

像这样:

foreach ($menus1 as $m1) {
    if ($m1->date != $date) continue;

    echo $m1->starter_name . ' ' . $m1->main_name;

}

foreach ($menus2 as $m2) {
    if ($m2->date != $date) continue;
    echo $m2->starter_name . ' ' . $m2->main_name;
}

或者更好的方法是使用filter方法,该方法使用给定的回调过滤集合,仅保留那些通过给定的真实性测试的项目。然后使用each()方法相应地遍历它:

$menus1->filter(function ($m1) use ($date) {
    return $m1->date == $date;
})->each(function($m1) {
    echo $m1->starter_name . ' ' . $m1->main_name;
});

$menus2->filter(function ($m2) use ($date) {
    return $m2->date == $date;
})->each(function($m2) {
    echo $m2->starter_name . ' ' . $m2->main_name;
});