プラグイン: FriendsOfCake/Search
CakePHP: 3.1.4
プラグインを使用して、フォームで index.ctp ビュー データをフィルタリングしています。この同様の質問: How to Filter on Associated Data は、属している関連付けに関するものです。私の質問は、関連付けられたテーブルが直接ではなく joinTable を介してリンクされている関連付けられた HABTM データに関するものです。この場合、次のようなモデルの通常のセットアップは機能しません。
->value('painting', [
field' => $this->Paintings->target()->aliasField('id')
)]
私のテーブルは次のように設定されています:
- チケットはToManyの絵画に属しています
- 絵画はたくさんのチケットに属しています
- joinTable ticket_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 に追加されるため、sth が間違っている必要がある部分のみを挿入します。
フィルタリング後、次のエラーが表示されます。
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Paintings.id' in 'where clause'
チケット ビューで絵画テーブルのデータを表示するだけの場合、コンテインは適切に機能します。
しかし、私が見ることができる SQL クエリのコードでは、含まれているすべてのテーブル (Members、Appoinments) は、Paintings テーブルを除くクエリに対して結合されているため、明らかに列を見つけることができません...そして、実際にはできないと思いますそれらはjoinTableを介してのみ接続されているため、とにかく直接参加してください。
私はCakePHPを初めて使用し、ここで何が間違っているのか本当に理解できないので、誰かが私を少し助けてくれることを願っています.
プラグイン設定で別の構文を使用する必要がありますか? テーブルを別の方法で設定する必要がありますか? または、検索にhabtm関連テーブルを組み込むようにクエリにどのように正確に指示できますか?
ありがとう!