Мне было интересно, как я буду выполнять подзапросы в красноречиве. вот суть, содержащая подзапрос, который я хочу выполнить, и db, который я использую с красноречивой структурой модели.mysql subquery using laravel's red redquent
//the query I want to execute
select p.title, c.total
from posts as p,
(select post_id as id, count(*) as total from comments group by post_id) as c
where p.id=c.id
//my table structures
table posts -
id title content
table comments -
id post_id content
//eloquent models
class Post extends Eloquent{
public static $timestamps = false;
public function comments(){
return $this->has_many('Comment', 'post_id');
}
}
class Comment extends Eloquent{
public static $timestamps = false;
public function post(){
return $this->belongs_to('Post', 'post_id');
}
}
В основном я хочу использовать eloquent для выполнения запроса, который содержит подзапрос. Я знаю, что могу использовать DB :: query(); метод для выполнения необработанного запроса или может попытаться использовать соединение, но я хочу придерживаться красноречия. любое архитектурное предложение приветствуется также потому, что я могу пропустить способ, которым можно следовать, используя красноречие, чтобы получить тот же результат, не используя тот же самый запрос.
благодарит заранее.
Я не думаю, что это возможно. Для этого нет никаких методов. – Gargron
Вам нужно будет создать собственный метод класса и использовать свободный конструктор запросов. Это будет не совсем то, что вы хотите, но будете делать то, что вам нужно. См. [Конструктор запросов по свободному запросу] (http://laravel.com/docs/database/fluent#aggregates) – Cristian
Другим вариантом получения комментария является 'Post :: with ('comments')', тогда просто используйте php 'count()' на представлении. – Cristian