Laravel orm with() 不起作用

Posted

技术标签:

【中文标题】Laravel orm with() 不起作用【英文标题】:Laravel orm with() not works 【发布时间】:2020-02-27 12:00:06 【问题描述】:

JoinSkipReason没有id,但是JoinReview的主键是JoinSkipReason的外键。

查询生成器运行良好...

我想使用 with() 将 JoinSkipReason 加入到 JoinReview 表中。

谢谢。

JoinReview::with(
    'join_skip_reason'
);
class JoinReview extends Model

    public function joinSkipReason()
    
        return $this->hasOne('App\Models\Service\JoinSkipReason');
    

class JoinSkipReason extends Model

    protected $fillable = ['join_review_id', 'reason'];

    public function joinReview()
    
        return $this->belongsTo('App\Models\Service\JoinReview', 'id');
    

【问题讨论】:

请张贴表格的结构。 @TsaiKoga 问题解决了。 很好,这意味着你有primary_key。 Laravel 默认为每个表生成 primary_key id @TsaiKoga 当我制作JoinSkipReason 表时故意将primary key 除外 【参考方案1】:

我自己也遇到过这个问题,问题是要急切加载多词关系,您应该使用驼峰式。

在您的代码中:

JoinReview::with(
  'joinSkipReason'
);

我还发现了一个(kinda old) issue,说你也应该以camelCase的形式访问急切加载的关系,否则它会忽略缓存的结果并再次查询数据库。

【讨论】:

你救了我的命!【参考方案2】:

检查这样做

public function joinSkipReason()

    return $this->hasOne('App\Models\Service\JoinSkipReason','join_review_id','id');

【讨论】:

可悲...它不起作用。我认为问题是因为 JoinSkipReason 表中的“无主键”......

以上是关于Laravel orm with() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ORM 在 laravel 的默认用户控制器和用户模型中不起作用

Laravel 多对多关系不起作用

$query->with() 正在工作,但 $query->load() 在 Laravel 中不起作用

使用 laravel 急切加载选择特定列不起作用

Laravel 6:使用变量和消息重定向 - 不起作用

空标签在 PhpStorm (Laravel 7) 中的某些浏览器警告中不起作用