Вопрос по паттерну ActiveRecord

231
24 октября 2017, 03:05

В Active Record объектный экземпляр привязан к единственной строке в таблице.

Как можно тогда объяснить такие методы? Ведь они не соответствуют записи в бд?

Джойны

$book = Book::all(array('joins' => array('author')));
sql => SELECT `books`.* FROM `books`
    INNER JOIN `authors` ON(`books`.author_id = `authors`.id)

Агрегатные функции

Book::find('all', array('select' => 'avg(price) as avg_price, avg(tax) as avg_tax'));
sql => SELECT avg(price) as avg_price, avg(tax) as avg_tax FROM `books` LIMIT 5,10

Группировка

Book::all(array('group' => 'price'));
sql => SELECT * FROM `books` GROUP BY price

Группировка + having

Book::all(array('group' => 'price', 'having' => 'price > 45.00'));
sql => SELECT * FROM `books` GROUP BY price HAVING price > 45.00

Или же вообще нативный запрос

$book = Book::find_by_sql('select title from `books`');

Объясните пожалуйста. Заранее спасибо

Answer 1

Всё довольно просто. В таких случаях вы выбираете не одну модель, а сразу коллекцию моделей (или массив). Например, в известном фреймворке Laravel имеется возможность получить сразу несколько моделей следующим образом:

$models = Model::where('id', '>', '2')->get();

Здесь выберутся все модели, id которых больше двух. Вернутся они в виде коллекции моделей (если вас смущает нестандартное для PHP слово коллекция - считайте, что это "массивы на стероидах").

READ ALSO
mysqli вывод по одной записи

mysqli вывод по одной записи

Добрый деньЕсть база такого формата

295
Работа с ListView

Работа с ListView

Можно ли как-то сделать чтобы при отсутствии элементов в списке ничего не выводилось совсем? Да, знаю там есть свойство emptyText, но даже с ним...

218
Как использовать free в качестве deleter'а?

Как использовать free в качестве deleter'а?

У меня есть примерно такой код:

260