我在让多态关系在 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。
最佳答案
在 images
中,您的 type
列应包含模型名称,在您的情况下为 App\Vacation
或 App\Post
。
关于Laravel 多态关系与自定义键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43612399/