laravel - 使用 laravel eloquent 关系查询数据库
问题描述
我的控制器中有以下查询,这在不使用关系模型的情况下工作得很好。
$menuitems = Menuitems::select(['item_id','item_name','item_price', 'item_code', 'item_status', 'menu_group_name'])
->join('menu_item_groups', 'menu_items.itemgroup_id', '=', 'menu_item_groups.menu_group_id')
->get();
现在我尝试使用关系,我在Menuitems模型中定义了以下关系,因为每个菜单项都属于Menuitemgroup之一
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Menuitems extends Model
{
use HasFactory;
protected $table = 'menu_items';
protected $primaryKey = 'item_id';
public function menuitemgroup()
{
return $this->belongsTo(Menuitemgroups::class, 'menu_group_id', 'itemgroup_id' );
}
}
现在我想运行与加入相同的查询,但我找不到正确运行的代码,menu_group_name是另一个表 Menuitemgrous 的一部分,它是menu_group_id的 id
我将 $menuitems 作为 json 传递给数据表。
如何查询$menuitems?
解决方案
使用 Eloquent 和 Laravel 关系,你可以试试下面的
$menuitems = Menuitems::with('menuitemgroup')
->get()
->map(function($item){
$value = $item->menuitemgroup->menu_group_name;
unset($item->menuitemgroup);
$item->menuitemgroup = $value;
return $item;
});
顺便说一句,您还应该在 Menuitemgroup 上定义反向关系
//App\Models\Menuitems.php
public function menuitemgroup()
{
return $this->belongsTo(Menuitemgroups::class, 'itemgroup_id', 'menu_group_id' );
}
//App\Models\Menuitemgroups.php
public function menuitems()
{
return $this->hasMany(Menuitems::class, 'itemgroup_id', 'menu_group_id');
}
推荐阅读
- javascript - 我更改了 flask-qrcode 中的语法但不能
- sql - 如何在两列数据类型均为日期的 Oracle 中的两列之间找到最多两位小数的分钟差异?
- python - 我无法理解这个列表理解
- linux - 物理 KASLR 已禁用:没有合适的内存区域
- typescript - 如何在 TypeScript 中将函数类型转换为异步等效项?
- html - 将链接添加到图像会破坏其他所有内容
- statistics - 计算给定 alpha 和均值的决定系数
- typescript - 尝试使用angularfire以角度加入一对多的firebase文档
- c++ - 无法发现使用另一个类 C++ 的“朋友”函数的错误
- c# - 获取所有相关食谱,无需过滤位置