
Konstantin
07.03.2017
14:17:40
так как же быть? как получить данные из не основной таблицы
http://shot.hsdn.org/KTcYmuvv

Antony
07.03.2017
14:23:52
http://shot.hsdn.org/KTcYmuvv
http://www.yiiframework.com/doc-2.0/yii-db-activerecord.html#findBySql()-detail
http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#hasOne()-detail
http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#hasMany()-detail

Konstantin
07.03.2017
14:25:44
встречал эти методы

Google

Konstantin
07.03.2017
14:26:21
но как прикрутить не понимаю. такое ощущение что никто LEFT JOIN не использует

Artur
07.03.2017
14:27:00
Првиет всем. Как в yii2 проверить вьюшку перед рендерод на существование?

Konstantin
07.03.2017
14:35:15

Antony
07.03.2017
14:36:55

Konstantin
07.03.2017
14:39:20
мне нужно пользоваться LEFY JOIN но данных нет, хотя запрос к базе идет правильный

Antony
07.03.2017
14:43:57
мне нужно пользоваться LEFY JOIN но данных нет, хотя запрос к базе идет правильный
Что у тебя в listing()?
Ну и 2й параметр по докам указывается так:
The join condition that should appear in the ON part. Please refer to where() on how to specify this parameter.
Note that the array format of where() is designed to match columns to values instead of columns to columns, so the following would not work as expected: ['post.author_id' => 'user.id'], it would match the post.author_id column value against the string 'user.id'. It is recommended to use the string syntax here which is more suited for a join:
'post.author_id = user.id'
http://stuff.cebe.cc/yii2docs/yii-db-query.html#leftJoin()-detail
Смотри в логах запрос, смотри что в БД.

Konstantin
07.03.2017
14:44:09
блин это же основная работа программера юзать две таблицы связанные между собой, но в инете ничего нормально объясняющего нет

Antony
07.03.2017
14:44:42
viaTable()?

Konstantin
07.03.2017
14:45:04
в listing() у меня PriceExample::find()
viaTable()?
нет, виа табле вроде используется когда есть таблица связывающая две другие, а у меня в двух таблицах айди одинаковые

Antony
07.03.2017
14:47:48

Konstantin
07.03.2017
14:48:04
да у меня связь один к одному
строка из таблицы 1 имеет айди такой же как в строке из таблицы 2

Google

Konstantin
07.03.2017
14:49:14
айди уникальные и не могут повторятся

Antony
07.03.2017
14:50:45
PriceExample
public function getPriceFeatures() {
return $this->hasOne(PriceFeatures::className(), ['id' => 'id']);
}

Konstantin
07.03.2017
15:00:49
добавил
но толку пока что нет
http://shot.hsdn.org/HdZu8nlj

Antony
07.03.2017
15:03:34
$pe = new PriceExampleIndex();
var_dump($pe->priceFeatures);

Konstantin
07.03.2017
15:05:01
переместил не в наследуемый класс
вроде чот другое выдало
http://shot.hsdn.org/lIw1dOlb
к запросу добавил
->with('PriceFeatures')
->all();

Antony
07.03.2017
15:07:03
Тебе говорят что есть релейшн "priceFeatures" (case sensitive).
Мне еще ошибки переводить?

Konstantin
07.03.2017
15:07:25
->with('priceFeatures')
сделал так
все равно та же ошибка
Getting unknown property: app\modules\manager\models\PriceExample::area
суть в том что в PriceExample нет поля area так как это поле таблицы price_features
http://shot.hsdn.org/4teVTpPc
запрос то верный можно посмотреть

Antony
07.03.2017
15:13:42
Ну так find() на выходе тебе пытается создать AR модель с полями, которые пришли, как я понимаю.
Зачем тебе вообще join там?
Можно же $Model->listing()->priceFeatures получить данные второй таблицы.
И работать как с AR PriceFeatures

Google

Konstantin
07.03.2017
15:16:16
они будут связанные?

Antony
07.03.2017
15:16:23
Да
они будут связанные?
http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#declaring-relations

Konstantin
07.03.2017
15:18:53
ну и у меня так же
http://shot.hsdn.org/L7RnhDZX
http://shot.hsdn.org/ix6m2UJl
и в контроллере
http://shot.hsdn.org/4gbCKr8M
все как в примере

Antony
07.03.2017
15:21:08
Accessing Relational Data
After declaring relations, you can access relational data through relation names. This is just like accessing an object property defined by the relation method. For this reason, we call it relation property. For example,
// SELECT * FROM `customer` WHERE `id` = 123
$customer = Customer::findOne(123);
// SELECT * FROM `order` WHERE `customer_id` = 123
// $orders is an array of Order objects
$orders = $customer->orders;
$Model::find()->select('*')->all();
$models = $Model::find()->select('*')->all() ; //Model PriceExample
foreach ($models as $price) {
var_dump($price->priceFeatures);
}

Konstantin
07.03.2017
15:27:04
вот принт
http://shot.hsdn.org/GjUHUaDt

Antony
07.03.2017
15:28:33
Ну так $price = PriceExample, в $price->priceFeatures = relational PriceFeatures.
Что еще нужно?
Доступ к атрибутам так же $price->priceFeatures->id, $price->priceFeatures->area, $price->priceFeatures->corner...

Konstantin
07.03.2017
15:29:33
хз, я привык лефт джоин использовать
даже мыслей небыло так делать
$price->priceFeatures
вот я бы так не догадался сделать ?
но оно не работает если так не сделать:
class PriceExample extends \yii\db\ActiveRecord
{
public function getPriceFeatures() {
return $this->hasOne(PriceFeatures::className(), ['id' => 'id']);
}
косячок есть

Google

Konstantin
07.03.2017
15:37:30
SELECT * FROM price_features WHERE id=26
вот теперь он строчик кучу запросов с разным айди
это только касается второй таблицы
первая все строки берет одним запросом

andrew
07.03.2017
15:39:48
а какой php код запроса?

Antony
07.03.2017
15:39:53
косячок есть
Если хочешь JOIN, то юзай
http://www.yiiframework.com/doc-2.0/yii-db-command.html
$connection = Yii::$app->getDb();
$command = $connection->createCommand("_YOUR_SQL_HERE_");
$result = $command->queryAll();

Admin
ERROR: S client not available

Konstantin
07.03.2017
15:40:14
да делал такое

Antony
07.03.2017
15:40:25
И просто получай одним запросом все в массив.

Konstantin
07.03.2017
15:40:42
вот оно
http://shot.hsdn.org/TqMowuCH

andrew
07.03.2017
15:41:09
PriceExample::find()->joinWith('priceFeatures')->all() ?

Konstantin
07.03.2017
15:41:40
нет , без joinWith
ой

andrew
07.03.2017
15:41:58
почему

Konstantin
07.03.2017
15:41:59
ща попробую )

andrew
07.03.2017
15:42:00
какая задача?
это жадная загрузка
через joinWith
просто with это не жадная

Google

Konstantin
07.03.2017
15:43:16
опачки, спасибо милый человек теперь запрос один
SELECT * FROM price_features WHERE id IN (22, 23, 24, 25, 26)

andrew
07.03.2017
15:43:28
:3

Konstantin
07.03.2017
15:44:24
ребята сделайте статью ))) видите как сложно это к пониманию ))) думаю она будет популярна

MSQ
07.03.2017
15:44:48
Он тащит связные данные через IN

andrew
07.03.2017
15:46:20
а joinWith тащит данные вместе с запросом
через join
насколько я помню
но там есть и свои какие то заморочки, я давно там по исходникам не ползал
лучше использовать joinWith, он одним запросом все соберет

MSQ
07.03.2017
15:47:00
Угу. Надо в сорцах глянуть

andrew
07.03.2017
15:47:44
а with - да, он собирает массив айдишников и отправляет запрос

MSQ
07.03.2017
15:47:52
Но там за два

andrew
07.03.2017
15:47:58
но это не жадная загрузка, так как жадная это 1 запрос через join

MSQ
07.03.2017
15:47:59
запроса

andrew
07.03.2017
15:48:05
joinWith*

Konstantin
07.03.2017
15:49:44
в общем кому нужно вот 4 способа получить данные из двух таблиц в одном скрине