Cakephp 3: Как игнорировать beforefind для определенных запросов?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Cakephp 3: Как игнорировать beforefind для определенных запросов?

Сообщение Anonymous »

Я работаю над многоязычными публикациями. Я добавил beforefind() в PostsTable, чтобы иметь возможность перечислять сообщения на текущем языке

Код: Выделить всё

public function beforeFind(Event $event, Query $query) {

$query->where(['Posts.locale' => I18n::locale()]);
}
Чтобы пользователи могли дублировать сообщения на разных языках, я написал следующую функцию:

Код: Выделить всё

public function duplicate(){
$this->autoRender = false;
$post_id= $this->request->data['post_id'];

$post = $this->Posts
->findById($post_id)
->select(['website_id', 'category_id', 'locale', 'title', 'slug', 'body', 'image', 'thumb', 'meta_title', 'meta_description', 'other_meta_tags', 'status'])
->first()
->toArray();

foreach($this->request->data['site'] as $site) {
if($site['name'] == false) {
continue;
}
$data = array_merge($post, [
'website_id' => $site['website_id'],
'locale' => $site['locale'],
'status' => 'Draft',
'duplicate' => true
]);

$pageData = $this->Posts->newEntity($data);

if($this->Posts->save($pageData)) {
$this->Flash->success(__('Post have been created.'));;
} else{
$this->Flash->error(__('Post is not created.'));
}

}

return $this->redirect(['action' => 'edit', $post_id]);
}
Чтобы проверить, не дублируются ли посты. Я проверяю функцию «Редактировать»:

Код: Выделить всё

    $languages = TableRegistry::get('Websites')->find('languages');

foreach($languages as $language)
{
$exists[] = $this->Posts
->findByTitleAndWebsiteId($post['title'], $language['website_id'])
->select(['locale', 'title', 'website_id'])
->first();
}
$this->set('exists',$exists);
но поскольку beforefind() добавляет запрос к вышеуказанному запросу. Я не получаю никаких результатов. Есть ли способ игнорировать beforefind() только для определенных запросов. Я попробовал использовать объект, как показано ниже:

Код: Выделить всё

public function beforeFind(Event $event, Query $query) {

if(isset($entity->duplicate)) {
return true;
}
$query->where(['Posts.locale' => I18n::locale()]);
}
но не повезло. Может ли кто-нибудь помочь мне? Спасибо за прочтение.

Подробнее здесь: https://stackoverflow.com/questions/278 ... ic-queries
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»