考虑不首先使用关系,
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)
我无法确定为什么会这样?预先感谢您提供的任何帮助。 :)
答案 0 :(得分:1)
get()
是non static的方法,因为您收到了
从posts_two中选择*
但是with()
是static方法。静态方法使用全新的实例,因此它们将创建具有默认 table属性的新实例。因此,您收到了
从帖子中选择*
根据我的理解,您不能在此处使用静态方法,因此,我认为您必须先获取posts_two
数据,然后再使用comments
数据获取posts_two
并绑定在一起。