1

プラグイン: 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関連テーブルを組み込むようにクエリにどのように正確に指示できますか?

ありがとう!

4

1 に答える 1