2015-04-16 2 views
4

У меня есть две таблицы, которые я хочу присоединиться ... например, лагеря & городов. Я пишу запрос в PHP для этого ... но я хочу тот же запрос в формате Yii2 ... Скажите, пожалуйста, как я могу написать этот запрос в yii2 ... ??Yii2: Как написать запрос Mysql для выбора записей из двух таблиц с использованием левого соединения

Вот мой запрос:

SELECT DISTINCT camps.city_id, camps.state_id, cities.city_name 
    from camps 
    LEFT JOIN cities 
    ON cities.state_id = camps.state_id 
    WHERE camps.state_id = 5 
    AND camps.status = '1' 
    ORDER BY cities.city_name ASC 

ответ

1

Эквивалент с ActiveQuery может быть так:

Camp::find() 
    ->select(['city_id', 'state_id', 'city_name']) 
    ->distinct() 
    ->joinWith('city') 
    ->where([ 
     'state_id' => 5, 
     'status' => 1, 
    ]) 
    ->orderBy(['city_name' => SORT_ASC]) 
    ->all(); 

И добавить отношение к Camp модели:

public function getCity() 
{ 
    $this->hasOne(City::className(), ['state_id' => 'state_id']); 
} 

Вы можете найти документы в:

+0

ее не работает ... Можете ли вы сказать мне еще один способ ...? Я имею в виду, используя левое соединение ... ?? Я написал этот запрос в yii2, используя левое соединение ... но порядок по методу не работает ... И также я не уверен, что это правильно или нет ... ?? Пожалуйста, посмотрите на это qeury ... это правильно ... ?? Camp :: найти() -> выберите ([ 'camp.city_id, camp.state_id, camp.city_name']) -> различны ('camp.city_id') -> из ([лагерь]) -> leftJoin ('cities', ['cities.state_id' => 'camp.state_id']) -> где (['camp.state_id' => $ state_id]) -> andWhere (['camp.status '=>' 1 ']) -> orderBy ([' cities.city_name '=> SORT_ASC]); –

+0

@arogachev ошибочен с методом '-> с ('city')'. Используйте '-> joinWith ('city')' –

+0

@SantoshGaikwad Нет, ваш запрос неверен. Обновлен ответ с 'join'. – arogachev

0
$query = new Query(); 
    $query->select(['camps.city_id', 'camps.state_id', 'cities.city_name'])-> 
     from('cities')-> 
     innerJoin('camps','cities.state_id = camps.state_id')-> 
     where(['camps.state_id' => 5,'camps.status' => '1'])->all(); 
0

Используйте это, я надеюсь, что это поможет вам

$sql = " SELECT DISTINCT camps.city_id, camps.state_id, cities.city_name 
from camps 
LEFT JOIN cities 
ON cities.state_id = camps.state_id 
WHERE camps.state_id = 5 
AND camps.status = '1' 
ORDER BY cities.city_name ASC "; 

$query = Yii::$app->db->createCommand($sql)->execute(); 
4
use yii\db\Query; 

$query = new Query(); 
$query->select 
         (['camps.city_id AS City, camps.state_id AS State, cities.city_name AS Name' 
         ]) 
         ->from('camps') 
         ->join('LEFT JOIN',' cities','cities.state_id = camps.state_id') 
         ->where('camps.state_id=:id',['id'=>5]) 
         ->andWhere('camps.status=:no',['no'=>1]); 


$command = $query->createCommand(); 
$result = $command->queryAll(); 
Смежные вопросы