У меня есть Item
модели, которая имеет следующие ассоциации:Регистрация одного элемента из соответствующей таблицы на основе мин поля
public $hasOne = array(
'Project' => array(
'className' => 'Project',
'foreignKey' => 'item_id'
)
);
public $hasMany = array(
'ItemPic' => array(
'className' => 'ItemPic',
'foreignKey' => 'item_id',
'dependent' => false
)
);
Я желающее пользовательские данные для различных представлений Item
. Кажется, что CakePHP автоматически включает в себя данные Project
(может быть, потому, что это hasOne
?) И не включает данные ItemPic
. В index
я действительно даже не хочу данных Project
... однако, мне нужны данные ItemPic
. За каждую выписку Item
я хочу, чтобы к ней присоединилась одна запись ItemPic
. Этот ItemPic
должен быть в основном ItemPic.item_id = Item.id
и ORDER BY ItemPic.rank LIMIT 1
.
Целью этого является то, что в индексе я могу показать список элементов и изображение, связанное с каждым элементом. Я хотел бы, чтобы все изображения вместе с данными Project
в view
для одного Item
, но не в списке/указателе.
мне сказали, что я мог бы использовать containable
так:
// In the model
public $actsAs = array('Containable');
// In the controller
$this->paginate = array(
'conditions' => $conditions,
'contain' => array(
'ItemPic' => array(
'fields' => array('file_name'),
'order' => 'rank',
'limit' => 1
)
)
);
выше на самом деле работает, как я хочу ... Но я также сказал, что делает это может вызвать дополнительный запрос будет баллотировался на каждый один Item
... который я чувствую, чего я должен избегать.
Я попытался сделать это, но я получаю дубликаты данных, и это не придает ItemPic
данные:
$this->paginate = array(
'conditions' => $conditions,
'joins' => array(
array(
'table' => 'item_pics',
'alias' => 'ItemPic',
'type' => 'LEFT',
'conditions' => array(
'ItemPic.item_id = Item.id'
),
'order' => 'rank ASC',
'limit' => 1
)
)
);
$paginated = $this->Paginator->paginate();
Это действительно похоже на работу для добавления 'ItemPic' вещи, и я могу удалить' project' материал, который хорошо. Однако сейчас я получаю дубликаты данных. Я получаю элемент 1 с каждым изображением, связанным с ним в разных строках, а не только с элементом 1 с изображением минимального ранга 1. – smerny
Вот запрос, который он использует с вышеперечисленным: http://pastebin.com/1VWXXGTy (я также замечаю, что он все еще присоединяется к «Project». И вот результирующий массив (обрезанный): http: // pastebin. com/nQkMUiCG – smerny
Я предполагаю, что поля 'order' и' limit' в массиве 'joins' не работают (или, по крайней мере, не так, как я ожидал). – smerny