首页 > 解决方案 > 雄辩的 setTable() 后关系不起作用

问题描述

考虑不先使用关系,

    DB::connection()->enableQueryLog();
    $oPost = new Post();
    $oPost->setTable('posts_two');
    $aPost = $oPost->get();
    $queries = DB::getQueryLog();
    dd($queries);

这导致以下查询

选择 * 从posts_two

现在,考虑关系的情况,

    DB::connection()->enableQueryLog();
    $oPost = new Post();
    $oPost->setTable('posts_two');
    $aPost = $oPost->with('comments')->get();

    $queries = DB::getQueryLog();
    dd($queries);

这导致以下查询

选择 * 从posts

问题是,每当我使用with()时,它都会采用默认表(帖子)而不是我通过setTable(posts_two)设置的表名

我无法确定为什么会发生这种情况?提前感谢任何形式的帮助。:)

标签: laraveleloquentrelationship

解决方案


get()是非静态方法,因为您收到了,

从posts_two中选择*

但是with()静态方法。静态方法使用全新的实例,因此他们创建具有默认表属性的新实例。因此你收到,

从帖子中选择 *

根据我的理解,你不能在这里使用静态方法,因此我认为你必须先获取posts_two数据,然后你必须comments使用posts_two数据获取并绑定在一起。


推荐阅读