雄辩的setTable()之后关系不起作用

时间:2019-09-18 06:02:24

标签: laravel eloquent relationship

考虑不首先使用关系,

    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)

我无法确定为什么会这样?预先感谢您提供的任何帮助。 :)

1 个答案:

答案 0 :(得分:1)

get()non static的方法,因为您收到了

  

从posts_two中选择*

但是with()static方法。静态方法使用全新的实例,因此它们将创建具有默认 table属性的新实例。因此,您收到了

  

从帖子中选择*

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