laravel:通过标记从集合中获取模型

yyyllmsg  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(358)

我目前正在一个页面上工作,以选择一个菜单,以便为未来几周订购。您可以在菜单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();

现在我有两个菜单模型集合。我们的目标是在网页上再次查询这个集合,在那里我显示模型的数据。
例如:

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

现在我陷入了一个问题,我不能把他们弄出来。它总是返回一个空集合。

olqngx59

olqngx591#

因为您使用的是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;
});
v64noz0r

v64noz0r2#

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

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

看一看拉维收藏文档

5q4ezhmt

5q4ezhmt3#

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

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

首先,因为只有一个。现在我可以通过以下方式获得数据:

$menu->starter_name
$menu->main_name

相关问题