laravel 自定义多态关联的类型字段 string 转 int 的问题?

发布于 2022-09-07 15:32:20 字数 872 浏览 23 评论 0

自定义多态关联的类型字段
写映射

[
1=>'App\Post',
2=>'App\Commit',
]

但是我有多个表是多对多关系呢?

需要另一套映射

[
1=>'App\Other',
2=>'App\User',
]

多态关联的表类型都用的int,但是1在不同的model中映射的不同的表,这样该怎么做呢?

  public function click()
    {
        if ($this->type == 1) {
            return $this->belongsTo('App\Models\HomeList', 'click_id');
        }
        if ($this->type == 2) {
            return $this->belongsTo('App\Models\SlideShow', 'click_id');
        }
        if ($this->type == 3) {
            return $this->belongsTo('App\Models\ReleaseTask', 'click_id');
        }

        return $this->belongsTo('App\Models\HomeList', 'click_id');
    }

上面的代码结果 $this->type这个值解析不出来,一个if都没进!!!
我该怎么办?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我最亲爱的 2022-09-14 15:32:20

你是怎么调用这个click方法的,打印$this->type是没有值的吗?

箹锭⒈辈孓 2022-09-14 15:32:20

遇到了同样的问题,不知道题主当时是怎么解决的,我这边给解决掉了,原理就是利用 获取器

clipboard.png

clipboard.png

clipboard.png

下面贴一下代码。

// Tool 模型
class Tool extends Model
{
    const TABLE = 'tool';
    protected $table = self::TABLE;

    public function product()
    {
        return $this->morphOne(ShoppingCart::class, 'product');
    }

}
// Food 模型
class Food extends Model
{
    const TABLE = 'food';
    protected $table = self::TABLE;

    public function product()
    {
        return $this->morphOne(ShoppingCart::class, 'product');
    }
}
// ShoppingCart 模型
class ShoppingCart extends Model
{
    const TABLE = 'shopping_cart';
    protected $table = self::TABLE;

    public function product()
    {
        return $this->morphTo();
    }

    /**
     * @param $val
     * @return mixed|string
     * 这个方法很重要,getter 时数据库拿到的是 $val 中的源值 1、2,
     * 通过获取器修饰为对应的类。
     */
    public function getProductTypeAttribute($val)
    {
        $list = [
            1 => Tool::class,
            2 => Food::class,
        ];
        return $list[$val] ?? Tool::class;
    }
}

晚些时候通过发布一篇文章来详细描述。


更加顺手的用好 Laravel 的多态关联 - 开发中的一些奇技淫巧 - SegmentFault 思否

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文