我在让多态关系在 Laravel 中工作时遇到了一些问题


Vacations
    id
    name

Posts
    id
    name

Images
    id
    type_id
    type
Images.type_id 链接到 posts.idvacations.idImages.typepostvacation
帖子和假期可以有很多图片,但每张图片只属于 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\VacationApp\Post

Laravel 多态关系与自定义键-LMLPHP

关于Laravel 多态关系与自定义键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43612399/

10-09 23:04