2016-06-09 2 views
0

Я работаю на нескольких языках. В английской версии сайта все работает правильно, потому что я ввел переводы.Cakephp 3 - Удалить пустое сообщение из pagination

$blogPosts = $this->BlogPosts->find('all')->where(['BlogPosts.active' => 1]); 
$this->set('blogPosts',$this->paginate($blogPosts)); 

Если я изменил язык веб-сайта, я хотел бы удалить все сообщения, перевод которых заголовок не введен. Я попытался это, но он не работает:

$blogPosts = $this->BlogPosts->find('all')->where(['BlogPosts.active' => 1,'BlogPosts.title IS NOT' => null]); 
$this->set('blogPosts',$this->paginate($blogPosts)); 

Тем не менее печатные сообщения без заголовков. Как решить эту проблему?

+0

Проверьте, если ваш заголовок без перевода является 'null' или пустые«»в базе данных –

+0

Как я могу удалить сообщение по какой-либо причине из PAGINATION массива? – user3661042

+1

Возможный дубликат [Как предотвратить показ/получение нетранслируемого контента?] (Http://stackoverflow.com/questions/35258910/how-to-prevent-showing-receiving-untranslated-content) – ndm

ответ

0

Попробуйте эти условия:

public function index() 
{ 
    $this->paginate['conditions'] = ['BlogPosts.active' => true , 'BlogPosts.title IS NOT' => null, 'BlogPosts.title !=' => ' ']; 
    $this->paginate['order'] = ['BlogPosts.id' => 'desc']; 
    $this->paginate['limit'] = 4; 

    $blogPosts = $this->paginate($this->BlogPosts); 

    $this->set(compact('blogPosts')); 
    $this->set('_serialize', ['blogPosts']); 

} 

запрос:

SELECT * 
FROM blogPosts BlogPosts 
WHERE (
    BlogPosts.active = 1 
    AND BlogPosts.title IS NOT NULL 
    AND BlogPosts.title != '' 

) 
ORDER BY BlogPosts.id desc 
LIMIT 4 OFFSET 0 
+0

Это не работает. Как я могу манипулировать массивом pagination после выполнения запроса? Как только запрос будет выполнен, я хочу удалить некоторые сообщения – user3661042

+0

Какое условие вы хотите использовать для удаления некоторых сообщений? –

+0

@ user3661042 попробуйте удалить все '$ this-> paginate ['conditions']' и просто добавьте эту '$ this-> paginate ['conditions'] = ['BlogPosts.active' => true, 'BlogPosts.title IS NOT '=> null,' BlogPosts.title! = '=>' ']; ' –

0

Я думаю, что сталкиваются с simmilar вопросом раньше. Разбивка страницы не срабатывала, поскольку я исключил, когда я установил порядок, ограничивая вместе с обычаем, где условие.

Попробуйте это:

$this->paginate['order'] = ['BlogPosts.id' => 'desc']; 
$this->paginate['limit'] = 4; 

$query = $this->BlogPost->find() 
->select(['id', 'title', 'active']) 
->where(['BlogPost.active' => true, 'BlogPost.title IS NOT' => null, 'BlogPost.id !=' => '']) 
$data = $this->paginate($query); 
$this->set('BlogPost', $data);