Класс обертки Mysqli by Koenig (Допилить)

9.2K
.
ramzes
не слишком заморочено?
$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, я ни с билдером, ни с орм, не пойму как строить сложные запросы, так что бы они были проще чем нативное построение
.
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, напиши копию моего запроса(выше есть компилированный результат)
простые варианты ни чего не дают и не показывают, я все равно быстрее напишу это строкой, и вдвое быстрее прочитаю и пойму (не суть, все затупки на более менее сложных запросах)
.
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?
и что в классе модель?)
Всего: 362