не слишком заморочено?
$q = microapp::sql()->select(
array(
'forum_thread.*',
'users.login',
'users.ontime',
'users.name'
)
)
->from('forum_thread')
->left('users')
->on('last_post_author','id')
->where(
array(
array('forum_thread.parent_id', '=', 4),
array('forum_thread.thread_fixed', '=', 1)
),
array(
array('forum_thread.about', '=', 1)
)
)
->order('forum_thread.thread_fixed', 'DESC')
->order('forum_thread.last_time', 'DESC')
->limit(800, 20)->exec();
/*
SELECT `forum_thread`.*, `users`.`login`, `users`.`ontime`, `users`.`name`
FROM `forum_thread` LEFT JOIN `users`
ON `forum_thread`.`last_post_author` = `users`.`id`
WHERE (forum_thread.parent_id = 4 AND forum_thread.thread_fixed = 1) OR (forum_thread.about = 1)
ORDER BY `forum_thread`.`thread_fixed` DESC, `forum_thread`.`last_time` DESC
LIMIT 800, 20
*/
Все больше склоняюсь к мысле, что писать нативно и быстрее. и приятнее
ramzes, заморочено и толку никакого при этом
.
вот и я о том же думаю...
нафиг эти конструкторы, или огрызок или монстр получается, что то..
ramzes, ну тут ведь, я так понимаю, даже абстрации над диалектами СУБД нет. Т.е построитель запросов, ради построителя запросов.
Лучше уже ORM юзать.
L!MP, я ни с билдером, ни с орм, не пойму как строить сложные запросы, так что бы они были проще чем нативное построение
ramzes, в ORM ты описываешь связи обьектов и там всё реально проще
.
Вот например, у тебя есть обьект
User и есть
Thread. Между ними описываешь связь что
User имеет много
Thread, а
Thread принадлежит одному
User, и всё. Дальше работаешь вот так:
// выбираем юзера по айди
$user = User::find($id);
// выбираем все его темы
foreach ($user->threads as $thread) {
$thread->title;
}
// выбираем 10 последних тем и их авторов
$threads = Thread::order('updated_at', 'desc')->take(10)->get();
foreach ($threads as $thread) {
$thread->title;
$thread->user->name;
}
L!MP, напиши копию моего запроса(выше есть компилированный результат)
простые варианты ни чего не дают и не показывают, я все равно быстрее напишу это строкой, и вдвое быстрее прочитаю и пойму (не суть, все затупки на более менее сложных запросах)
ramzes, в твоём варианте вообще нет ничего сложного, я так понимаю там выборка тем с автором последнего сообщения.
class Thread extends Model {
public function closing() {
return $this->belongsTo(User::class, 'last_post_author');
}
}
Thread::with('closing')
->where(function($q) {
$q->where('parent_id', 4)->where('thread_fixed', 1);
})->or('about, 1)
->order('thread_fixed', 'DESC')
->order('last_time', 'DESC')
->limit(800, 20)
->get();
Ну а вообще такое сравнение в лоб не корректно. Тут речь не о том, что "меньше символов пишем", а о том, что мы имеем гибкий и единообразный механизм работы с персистентными данными.
В одном лишь примере я не могу тебе обьяснить что такое scope, и зачем они нужны. Не могу показать что есть коллекции данных со встроенным мехнизмом пагинации, и вот это твоё
->limit(800, 20)
вообще писать не надо, ну так далее
.
тут у меня пара вопросов.
а если сортировка не по thread таблице,а users?
и если в условии выборки не thread.about а скажем user.level?
и что в классе модель?)