2013-12-11 2 views
0

Page У меня есть модель, которая HAS_MANYAttachment В модели страницы:Yii модель сферы применения, связанные с

public function relations() 
{ 
    return array(
     'attachments'=>array(self::HAS_MANY, 'Attachment', 'parent_id'), 
    ) 
} 

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

В PageController у меня есть:

$model = Page::model()->with(array('attachments'))->findByAttributes(array('slug' => $slug)) 

Например, в представлении Страница Я хотел бы:

  • получить все вложения: $model->attachments (это работает отлично), но мне нужно:
  • все опубликованные вложения (все с status = 1)
  • получить первое продвинутое приложение (первое с promoted = 1)
  • получить только изображения (mime_type in_array 'image/jpeg', 'image/gif', ...)
  • получить все остальные файлы (все, что не является изображением)

и любое их сочетание. Пример: первое продвинутое и опубликованное изображение

Я думаю, что лучший вариант - сделать это без каких-либо дополнительных запросов и просто фильтровать $model->attachments, но возможно ли это?

Edit:

есть один pages стол и другой attachments стол

в таблице вложений у меня есть: id, parent_id, file_name, mime_type, status, promoted

+0

Прежде всего вы скажите мне, какое у вас имя класса модели?. Во-вторых, покажите мне свой метод полных отношений, а в-третьих, изображения, файлы имеют отдельные таблицы или отдельные вложения в таблицу. покажите мне ваши таблицы вложений только поля, тогда я могу ответить на ваш вопрос. Благодарю. –

+0

Посредством привязки вы можете получить только те поля, которые находятся в таблице вложений, если вы хотите другие поля, тогда вам нужно установить еще несколько отношений для изображений и файлов. –

+0

страниц класс модели 'Page' и вложение -' Attachment' только отношения между ними Page HAS_MANY Attachment в зависимости от вложений 'parent_id' всех вложений в одной таблице, и каждое вложение сохраняет это mime_type так быть в состоянии получить, например, «только изображения», «только НЕ изображения», «только архивы», «только rars», например –

ответ

1

вы можете сделать, как это :

$posts=Post::model()->with(array(
    'comments'=>array(
     'scopes'=>array('recently','approved') 
    ), 
))->findAll(); 
// or since 1.1.7 
$posts=Post::model()->findAll(array(
    'with'=>array(
     'comments'=>array(
      'scopes'=>array('recently','approved') 
     ), 
    ), 
)); 

http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-named-scopes

+0

, необходимо использовать дополнительный запрос, возможно, я просто фильтрую то, что уже есть в 'related' модели страницы –

+0

, если вы будете следовать этому URL-адресу, вы увидите, что вам нужно определить именованные области, вы можете сделать '$ posts = Post :: model() -> attachments-> promoted-> findAll()' – tinybyte

Смежные вопросы