@hollanditkzn

Как написать и где left join?

Мне нужно сделать чтобы в yii2 не отображался id а имя сотрудика. Код в sql я знаю как выглядет
SELECT * FROM `zakaz` LEFT JOIN otdel ON zakaz.id_sotrud=otdel.id

Но когда дело зашло написать его на yii то встал вопрос как его реализовать. Нашел пример в документации
$customers = Customer::find()
    ->select('customer.*')
    ->leftJoin('order', '`order`.`customer_id` = `customer`.`id`')
    ->where(['order.status' => Order::STATUS_ACTIVE])
    ->with('orders')
    ->all();

Но вопрос 1 как я понял его нужно вставить в ZakazQuery extends ActiveQuery
И прямо в первую функцию?
И да я использую еще CRUD куда нужно отображать всю информацию
Да и еще вопрос, он же будет так фильтровать и сортировать по тем значением который получил?

выходя из примера пробовал сделать
class ZakazQuery extends \yii\db\ActiveQuery
{
    $zakaz = Zakaz::find()
    ->select('zakaz.*')
    ->leftJoin('otdel', '`zakaz`.`id_sotrud` = `otdel`.`id`')
    ->all();

}
  • Вопрос задан
  • 139 просмотров
Пригласить эксперта
Ответы на вопрос 2
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
Все данные сотрудника в одной таблице хранятся или в разных?
Если в разных, то обойтись можно без left join, используйте вместо этого связи между таблицами.
Подробней здесь(работа со связными данными)
Ответ написан
@masterfreelance
программист со стажем
class Zakaz extends ActiveRecord
{
    public function getOtdel()
    {
        return $this->hasOne(Otdel::className(), ['id_sotrud' => 'id']);
    }
}

так вы получите связь таблиц заказ и отдел. То есть вы можете для каждого заказа получить отдел сотрудника.
Если вам нужно для отдела получить все заказы сотрудников отдела, тогда:
class Otdel extends ActiveRecord
{
    public function getOrders()
    {
        return $this->hasMany(Zakaz::className(), ['id' => 'id_sotrud']);
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы