Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
zxc
Сообщения: 98 Зарегистрирован: 2017.03.13, 01:06
Сообщение
zxc » 2017.03.17, 11:21
Здравствуйте. Как осуществить вывод из таблицу author через таблицу book, где связь один ко многим (один автор на несколько книг)?
Код контроллера
Код: Выделить всё
public function actionBooks()
{
$authors = \app\models\Author::find()->all();
$books = \app\models\Book::find()->with('author')->where('author_id'=>$authors->id)->all();
//$model = \app\models\Book::find()->with('author')->where(['author_id'=>$authors->id])->all();
//$books = \app\models\Book::find()->all();
foreach ($books as $book) {
$author = \app\models\Author::find()->where(['id'=>$book->author_id])->one();
//$book->autname = $author->name;
}
return $this->render('book-list', [
'books' => $books,
'author' => $author,
'authors' => $authors,
]);
}
zxc
Сообщения: 98 Зарегистрирован: 2017.03.13, 01:06
Сообщение
zxc » 2017.03.17, 11:22
Ошибка syntax error, unexpected '=>' (T_DOUBLE_ARROW) в строке $books = \app\models\Book::find()->with('author')->where('author_id'=>$authors->id)->all();
Krash
Сообщения: 29 Зарегистрирован: 2016.04.19, 12:43
Сообщение
Krash » 2017.03.17, 11:26
->where([ 'author_id'=>$authors->id] )
Ну и сам $authors->id у вас вызовет ошибку, т.к. $authors - массив
Последний раз редактировалось
Krash 2017.03.17, 11:32, всего редактировалось 1 раз.
zelenin
Сообщения: 10596 Зарегистрирован: 2013.04.20, 11:30
Сообщение
zelenin » 2017.03.17, 11:27
books = \app\models\Book::find()->with('author')->where('author_id'=>$authors->id)->all();
//$model = \app\models\Book::find()->with('author')->where(['author_id'=>$authors->id])->all();
ну сравните две строки
=> - знак, использующийся для привязки ключа к значению в массиве. у вас нет массива.
zxc
Сообщения: 98 Зарегистрирован: 2017.03.13, 01:06
Сообщение
zxc » 2017.03.17, 11:29
исправил строку $books = \app\models\Book::find()->with('author')->where(['author_id'=>$authors->id])->all();
zxc
Сообщения: 98 Зарегистрирован: 2017.03.13, 01:06
Сообщение
zxc » 2017.03.17, 11:30
ошибка Trying to get property of non-object
zelenin
Сообщения: 10596 Зарегистрирован: 2013.04.20, 11:30
Сообщение
zelenin » 2017.03.17, 11:32
перевожу: попытка получить свойство на не-объекте.
вижу одно обращение к свойству - $authors->id - и $authors не объект.
php-то надо знать хотя бы на среднем уровне, чтобы во фреймворк суваться.
zxc
Сообщения: 98 Зарегистрирован: 2017.03.13, 01:06
Сообщение
zxc » 2017.03.17, 11:33
Подскажите что делать, пожалуйста
zelenin
Сообщения: 10596 Зарегистрирован: 2013.04.20, 11:30
Сообщение
zelenin » 2017.03.17, 11:33
zxc писал(а): ↑ 2017.03.17, 11:33
Подскажите что делать, пожалуйста
поучить php
Krash
Сообщения: 29 Зарегистрирован: 2016.04.19, 12:43
Сообщение
Krash » 2017.03.17, 11:35
zxc писал(а): ↑ 2017.03.17, 11:33
Подскажите что делать, пожалуйста
Потому что find()-all() возвращает массив. А вы пытает обратиться к нему как к объекту. Возможно, вам надо воспользоваться find()->one()
zxc
Сообщения: 98 Зарегистрирован: 2017.03.13, 01:06
Сообщение
zxc » 2017.03.17, 11:35
До этого делал вывод все работало, но я выводил с помощью цикла, что не совсем оптимально, плюс условие для сравнения id в таблице author и поле author_id в таблице book
zxc
Сообщения: 98 Зарегистрирован: 2017.03.13, 01:06
Сообщение
zxc » 2017.03.17, 11:38
Trying to get property of non-object такая же ошибка с one()
zxc
Сообщения: 98 Зарегистрирован: 2017.03.13, 01:06
Сообщение
zxc » 2017.03.17, 11:39
php обязательно подучу
caHek2x
Сообщения: 1240 Зарегистрирован: 2016.04.12, 20:41
Сообщение
caHek2x » 2017.03.17, 11:47
zxc писал(а): ↑ 2017.03.17, 11:38
Trying to get property of non-object такая же ошибка с one()
значитт one возвращает null ...
zxc
Сообщения: 98 Зарегистрирован: 2017.03.13, 01:06
Сообщение
zxc » 2017.03.17, 12:13
и так понятно, что null, мне интересно как это исправить. Framework'ом пользуюсь недавно
Alexum
Сообщения: 683 Зарегистрирован: 2016.09.26, 10:00
Сообщение
Alexum » 2017.03.17, 12:39
zxc писал(а): ↑ 2017.03.17, 12:13
и так понятно, что null, мне интересно как это исправить. Framework'ом пользуюсь недавно
Что исправить то, что у вас запрос ничего не находит? Или проверку осилить не можете?
zxc
Сообщения: 98 Зарегистрирован: 2017.03.13, 01:06
Сообщение
zxc » 2017.03.17, 13:12
Запрос
andku83
Сообщения: 988 Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков
Сообщение
andku83 » 2017.03.17, 13:30
Чтоб работал ваш подход:
Код: Выделить всё
$authors = \app\models\Author::find()->all();
if ($authors){
$books = \app\models\Book::find()->with('author')->where(['author_id'=>$authors->id])->all();
} else {
$book = [];
}
Но вообще у вас полная фигня написана, там достаточно сделать 2 запроса в БД:
Код: Выделить всё
public function actionBooks()
{
$books = \app\models\Book::find()->with('author')->all();
return $this->render('book-list', ['books' => $books]);
}
а во вью для вывода имени автора использовать:
Код: Выделить всё
foreach ($books as $book){
$book->author->name;
}
Изучайте:
http://www.elisdn.ru/blog/89/related-models-on-yii2
Onotole
Сообщения: 1808 Зарегистрирован: 2012.12.24, 12:49
Сообщение
Onotole » 2017.03.17, 13:33
shnir писал(а): ↑ 2017.03.17, 13:30
Чтоб работал ваш подход:
Код: Выделить всё
$authors = \app\models\Author::find()->all();
if ($authors){
$books = \app\models\Book::find()->with('author')->where(['author_id'=>$authors->id])->all();
} else {
$book = [];
}
all() возвращает массив, а вы к нему сразу как к объекту...
andku83
Сообщения: 988 Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков
Сообщение
andku83 » 2017.03.17, 13:35
Onotole писал(а): ↑ 2017.03.17, 13:33
all() возвращает массив, а вы к нему сразу как к объекту...
Виноват, хотел написать так, пока писал забыл добавить:
Код: Выделить всё
$authors = \app\models\Author::find()->all();
if ($authors){
$books = \app\models\Book::find()->with('author')
->where(['author_id'=>ArrayHelper::getColumn($authors, 'id'])->all();
} else {
$book = [];
}