我在使用Laravel
中的多态关系时遇到了一些问题表格
Vacations
id
name
Posts
id
name
Images
id
type_id
type
Images.type_id
指向posts.id
或vacations.id
的链接
Images.type
可以是post
或vacation
帖子和假期可以有很多图片,但每张图片只属于1个帖子或假期。
假期模式
namespace App;
use App\Vacation;
class Vacation extends Model
{
public function images()
{
return $this->morphMany('App\Image', 'imageable', 'type', 'type_id');
}
}
图片模型
namespace App;
use App\Image;
class Image extends Model
{
public function imageable()
{
return $this->morphTo();
}
}
当我运行它时,我得到一个空数组,但是有匹配的记录。
$vacation = Vacation::find(1);
dd($vacation->images);
我可以看到Laravel试图跑:
select * from `images` where `images`.`type_id` = 1
and `images`.`type_id` is not null
and `images`.`type` = App\Vacation
当我运行此“原始”并将"App\Vacation"
替换为vacation
时,我会得到我的结果。
将命名空间的类名传递给原始sql查询是否正常?
我尝试将Images.type
值从复数更改为单数但仍然失败。
我做错了什么?
编辑:这是Laravel 5.4,最新版本afaik。
答案 0 :(得分:8)
对于它的价值,可以在不更新数据库的情况下实现您的目标。
我在遗留数据库中遇到了同样的问题,我通过将以下内容添加到bootstrap/app.php
来修复它。
\Illuminate\Database\Eloquent\Relations\Relation::morphMap([
'vacation' => \App\Vacation::class,
'post' => \App\Post::class
]);
答案 1 :(得分:0)
添加到度假课程
这条线
protected $morphClass = 'vacation';
如果你想把模特名称作为假期痛苦
答案 2 :(得分:0)