2016-11-11 3 views
0

Как я могу конвертировать Mysql Query:подзапросов в CakePHP 3,0

SELECT * , (

SELECT COUNT(*) 
FROM articles 
WHERE `user_id` =1 
) AS total_count 
FROM articles 
WHERE `user_id` =1 
GROUP BY user_id 

в CakePHP подзапрос?

Я попытался это,

$articlescount = $this->Articles->find('all')->where(['user_id' => 1])->count(); 
print_r($articlescount); 

Который возвращает меня только не графа.

ответ

1

У меня есть сомнения, что запрос вы используете это лучший способ сделать то, что вы хотите достичь, так как это, кажется, что запрос и подзапрос возвращают то же значение

В любом случае это, как вы можете получить точно такой же запрос, вы спросили

$q = $this->Articles->find(); 

$q->select([$q->func()->count('*')]) 
    ->where(['user_id' => 1]); 

$q2 = $this->Users->find() 
    ->select(['total_count' => $q]) 
    ->autoFields(true) 
    ->where(['user_id' => 1]) 
    ->group(['user_id']) 
    ->all(); 

$q является подзапрос, а $q2 фактический запрос вы хотите.

Кстати я думаю, что вы могли бы просто сделать

$q = $this->Users->find() 
    ->select(['total_count' => $q->func()->count('*')]) 
    ->autoFields(true) 
    ->where(['user_id' => 1]) 
    ->group(['user_id']); 
0

комментарий Ariala в почти хорошо, но я думаю, что этот код является более гибким, поскольку suquery не содержит идентификатор пользователя фиксированное состояние:

$q = $this->Articles->find(); 

$q->select([$q->func()->count('*')]) 
     ->where(['Articles.user_id = Users.id']); 

$q2 = $this->Users->find() 
     ->select(['id', 'first_name', 'total_count' => $q]) 
     ->where(['id' => 1]) 
     ->all(); 

Но если вы хотите перечислить всех пользователей со статьей, вы можете это сделать, если оставить условие where из $ q2.

Это будет результаты, как это:

id | first_name | total_count 
1 | John  | 3 
2 | Doe  | 0 
Смежные вопросы