【发布时间】:2020-06-19 16:05:53
【问题描述】:
在我的代码库中,我有一个资产模型和一个技术模型,
资产模型是可变形的,
public function assetable() {
return $this->morphToMany();
}
和技术模型也有关系,
public function asset() {
return $this->morphOne(Asset::class, 'assetable');
}
在我的控制器中,我正在执行以下操作,
public function create(Request $request) {
//Do validation
\DB::beginTransaction();
try {
$technology = Technology::create([
'technology' => $request->name,
'type' => 'payment'
]);
} catch(\Exception $e) {
\DB::rollback();
throw($e);
}
try {
//update the already uploaded asset so it relates to the newly created Technology
$assets = Asset::whereIn('id', $request->uploadedFile)->update([
'assetable_id' => $technology->id,
'assetable_type' => 'App\Payment'
]);
} catch(\Exception $e) {
\DB::rollback();
throw($e);
}
\DB::commit();
return response(['technology' => $technology->load('asset')], 201);
}
我想返回新创建的技术资产,并将资产关系作为结果的一部分,但它返回为空,
我做错了什么?确定不需要requry数据库吧?
【问题讨论】:
-
需要重新查询数据库。
Asset::update([ ... ])进行 SQL 查询UPDATE assets SET ...这不是一个将返回受影响行的查询 -
为什么要把变形的类类型设置为
App\Payment?当它尝试加载asset关系时,它将无法加载Technology,因为Asset与它无关……Asset与某个名为App\Payment的模型相关与Technology相同的“id”...除非Technology这是您的Payment类的别名? -
@lagbox facepalm 哦!谢谢哥们!
标签: php laravel eloquent polymorphism