Laravel - 虚拟列 id -> uuid
Laravel - virtual column id -> uuid
我有两个模型:
成分,类别
每种成分都有一个类别id,每个类别有很多成分。
问题是我在内部使用自动增量 ID 进行连接和查询,但只向最终用户显示 UUID。
所以成分 table 看起来像这样:
id uuid 名称category_id
类别 table 如下所示:
id uuid 名称
我的成分数据如下所示:
id: 1,uuid:{a uuid}, name: 成分 A, category_id: 1
当我执行 Ingredient::get() 时,我想 return 这个:
uuid:{成分uuid},名称:成分A,category_uuid:{类别uuid}
根据我所了解的 Laravel,您可以使用访问器和修改器。
我设置了
protected $appends = [
'category_uuid'
];
和
public function category()
{
return $this->belongsTo(Category::class);
}
public function getCategoryUuidAttribute()
{
return $this->category()->uuid;
}
但是我得到这个错误:
消息:“未定义 属性:Illuminate\Database\Eloquent\Relations\BelongsTo::$uuid”
我做错了什么?
问题似乎是将 ->first() 添加到方法链中,然后处理了它。
所以变成:
public function getCategoryUuidAttribute()
{
return $this->category()->first()->uuid;
}
您也可以使用查询生成器实现此目的:
public function index()
{
$ingredients = DB::table('ingredients')
->join('categories', 'ingredients.category_id', 'categories.id')
->select('ingredients.*', 'categories.uuid as c_uuid')
->get();
return view('index', compact('ingredients'));
}
@foreach($ingredients as $ingredient)
<ul>
<li>{{ $ingredient->uuid }}</li>
<li>{{ $ingredient->name }}</li>
<li>{{ $ingredient->c_uuid }}</li>
</ul>
@endforeach
我有两个模型:
成分,类别
每种成分都有一个类别id,每个类别有很多成分。
问题是我在内部使用自动增量 ID 进行连接和查询,但只向最终用户显示 UUID。
所以成分 table 看起来像这样:
id uuid 名称category_id
类别 table 如下所示:
id uuid 名称
我的成分数据如下所示:
id: 1,uuid:{a uuid}, name: 成分 A, category_id: 1
当我执行 Ingredient::get() 时,我想 return 这个:
uuid:{成分uuid},名称:成分A,category_uuid:{类别uuid}
根据我所了解的 Laravel,您可以使用访问器和修改器。
我设置了
protected $appends = [
'category_uuid'
];
和
public function category()
{
return $this->belongsTo(Category::class);
}
public function getCategoryUuidAttribute()
{
return $this->category()->uuid;
}
但是我得到这个错误:
消息:“未定义 属性:Illuminate\Database\Eloquent\Relations\BelongsTo::$uuid”
我做错了什么?
问题似乎是将 ->first() 添加到方法链中,然后处理了它。
所以变成:
public function getCategoryUuidAttribute()
{
return $this->category()->first()->uuid;
}
您也可以使用查询生成器实现此目的:
public function index()
{
$ingredients = DB::table('ingredients')
->join('categories', 'ingredients.category_id', 'categories.id')
->select('ingredients.*', 'categories.uuid as c_uuid')
->get();
return view('index', compact('ingredients'));
}
@foreach($ingredients as $ingredient)
<ul>
<li>{{ $ingredient->uuid }}</li>
<li>{{ $ingredient->name }}</li>
<li>{{ $ingredient->c_uuid }}</li>
</ul>
@endforeach