插件:FriendsOfCake/Search
如何篩選與FriendsOfCake搜索相關HABTM數據CakePHP的3
CakePHP: 3.1.4
我使用的插件用形式來篩選我index.ctp查看數據。 這個相似的問題: How to Filter on Associated Data 是關於一個belongsTo關聯。我的問題特別是關聯的HABTM數據,其中我的關聯表通過joinTable而不是直接鏈接。像下面的模型中的正常設置是不是在這種情況下工作:
->value('painting', [
field' => $this->Paintings->target()->aliasField('id')
)]
我的表設置,如:
- 門票belongsToMany繪畫
- 繪畫belongsToMany門票
- 與joinTable tickets_paintings
下面是主要設置:
class TicketsTable extends Table
{
public function initialize(array $config)
{
...
$this->belongsToMany('Paintings', [
'foreignKey' => 'ticket_id',
'targetForeignKey' => 'painting_id',
'joinTable' => 'tickets_paintings'
]);
}
public function searchConfiguration()
{
$search = new Manager($this);
$search->value('status', [
'field' => $this->aliasField('active'),
])->like('member_name', [
'field' => $this->Members->target()->aliasField('surname'),
'filterEmpty' => true
])->value('painting', [
'field' => $this->Paintings->target()->aliasField('id'), // not working
]);
return $search;
}
class TicketsController extends AppController
{
public function index()
{
$query = $this->Tickets
->find('search',
$this->Tickets->filterParams($this->request->query))
->contain(['Members', 'Paintings', 'Appointments']);
...
}
其他一切工作和參數添加到URL時篩選等等,所以我只把在部分地方某物有是錯的。
過濾後,我得到一個錯誤:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Paintings.id' in 'where clause'
的包含工作正常剛從畫表中的門票視圖中顯示數據時。
但是在SQL查詢的代碼中,我可以看到,所有包含的表(Members,Appoinments)都加入了查詢,但的Paintings表中,顯然它找不到列...而我猜想它不能直接加入它,因爲它們只通過joinTable連接。
我是CakePHP的新手,我無法真正弄清楚我在這裏做錯了什麼,所以希望有人能幫助我一點。
我是否必須在插件設置中使用不同的語法?我是否必須以不同的方式設置我的表格?或者我可以如何告訴查詢在搜索中包含habtm相關表?
謝謝!
我剛剛測試了你的例子「原樣」,並與另一個表,它的作品完美!太感謝了!我仍然在理解回調的概念和語法方面遇到了一些麻煩,但我會進一步研究它,因爲我需要更多類似的東西。也感謝鏈接! – eve