与ActiveRecord的左连接(yii2)
我尝试使用左联接发送SQL请求,但它不显示表2中的数据与ActiveRecord的左连接(yii2),activerecord,yii,yii2,Activerecord,Yii,Yii2,我尝试使用左联接发送SQL请求,但它不显示表2中的数据 似乎您正在将此函数添加到模型中,并且self表示模型本身 Yii不会从另一个表返回结果,仅当您在模型上调用find时,Yii才会限于该模型,相反,您需要使用db查询,如下所示: $query = new \yii\db\Query; $query->select('*') ->from('table 1 g1') ->leftJoin('table2 s1',
似乎您正在将此函数添加到模型中,并且self表示模型本身 Yii不会从另一个表返回结果,仅当您在模型上调用find时,Yii才会限于该模型,相反,您需要使用db查询,如下所示:
$query = new \yii\db\Query;
$query->select('*')
->from('table 1 g1')
->leftJoin('table2 s1', 's1.g_id AND s1.id = (SELECT MAX(id) FROM table2 s2 WHERE s2.g_id = g1.id')
->limit($Limit);
$command = $query->createCommand();
$resp = $command->queryAll();
似乎您正在将此函数添加到模型中,并且self表示模型本身 Yii不会从另一个表返回结果,仅当您在模型上调用find时,Yii才会限于该模型,相反,您需要使用db查询,如下所示:
$query = new \yii\db\Query;
$query->select('*')
->from('table 1 g1')
->leftJoin('table2 s1', 's1.g_id AND s1.id = (SELECT MAX(id) FROM table2 s2 WHERE s2.g_id = g1.id')
->limit($Limit);
$command = $query->createCommand();
$resp = $command->queryAll();
正确的SQL查询是
SELECT * FROM table 1 g1
LEFT JOIN table2 s1
ON g1.some_field = s1.some_field
其中g1.some\u field=s1.some\u field是定义联接的字段。正确的SQL查询是
SELECT * FROM table 1 g1
LEFT JOIN table2 s1
ON g1.some_field = s1.some_field
其中g1.some\u field=s1.some\u field是定义联接的字段。我有类似于…(join)的工作代码: 使用用户和用户朋友列表
$query = new Query;
$query ->select(['user.id AS user_id', 'user_friend_list.id'])
->from('user')
->innerJoin('user_friend_list', 'user.email = user_friend_list.email');
$command = $query->createCommand();
$data = $command->queryAll();
foreach($data as $datakey)
{
//echo $datakey['id'];
$friendfind = UserFriendList::findOne($datakey['id']);
$friendfind->is_app_using_user_id=$datakey['user_id'];
$friendfind->save();
}
我的工作代码类似于…: 使用用户和用户朋友列表
$query = new Query;
$query ->select(['user.id AS user_id', 'user_friend_list.id'])
->from('user')
->innerJoin('user_friend_list', 'user.email = user_friend_list.email');
$command = $query->createCommand();
$data = $command->queryAll();
foreach($data as $datakey)
{
//echo $datakey['id'];
$friendfind = UserFriendList::findOne($datakey['id']);
$friendfind->is_app_using_user_id=$datakey['user_id'];
$friendfind->save();
}
您还需要将表2中的列添加到select子句中。@PawełDuda,我试过了。我得到了相同的结果。请尝试以下操作:从表1 g1中选择*在g1.id=s1.g_id上左连接表2 s1,其中s1.id=从表2 s2中选择MAXid,其中s2.g_id=g1.id限制:限制显示表中的DDL SQL。您的SQL查询不正确。请看下面我的答案。您还需要将表2中的列添加到select子句中。@PawełDuda,我试过了。我得到了相同的结果。请尝试以下操作:从表1 g1中选择*在g1.id=s1.g_id上左连接表2 s1,其中s1.id=从表2 s2中选择MAXid,其中s2.g_id=g1.id限制:限制显示表中的DDL SQL。您的SQL查询不正确。见下面我的答案。