0

別の検索から受け取った配列に基づいて、cakePHP で検索を行う方法を見つけようとしています。

構造: データベースに多数のサイトがあります。私もいくつかのビジネスを持っています。各ビジネスには 1 つのサイトがありますが、すべてのサイトがビジネスに属しているわけではありません。ビジネスに属するサイトへの販売のすべての注文のリストを取得しようとしています。次のようなネストされた配列 ($businesses) で返される、ビジネスに属するすべてのサイトを取得するための find メソッドを既に実行しました。

array(
(int) 0 => array(
    'Business' => array(
        'id' => '17',
        'name' => 'Name',
        'code' => 'Code',
        'discount' => 'Discount',
        'site_id' => 47
    )
),
(int) 1 => array(
    'Business' => array(
        'id' => '19',
        'name' => 'Name',
        'code' => 'Code',
        'discount' => 'Discount',
        'site_id' => '108'
    )
),

ここで、この配列のデータを別の find メソッドの一部として使用したいと考えています。このようなもの:

$this->Order->find('all', array(
            'contain'=>array("Info"),
            'conditions'=>array('Order.sale_id' => $sale, 'Order.site_id' => $businesses),
            'order'=> array('last_name' => 'ASC')));

問題は、このようにすると、配列から文字列への変換エラーが発生することです。これは、$businesses がネストされた配列であるため、Cake がこれを次のように変換するためです。

AND `Order`.`site_id` IN (Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array)

ネストされた配列にアクセスして、注文の site_id を配列内の各ビジネスの site_id と比較するにはどうすればよいですか?

4

1 に答える 1

2

find()次のクエリを実行するために、返されたすべての情報は必要ありません。

基本的に必要なのは、SQL のIN式と、次のような ID の配列です。

$this->Order->find('all', array(
    'conditions'=>array(
        'Order.site_id' => Hash::extract($businesses, '{n}.Business.site_id')
     )
));

Hash::extract()の指定されたパス{n}.Business.site_idに含まれる ID の配列を作成し、 $businessescakephp はそこに配列があることに気付くので、指定された IDINのいずれかにすることをデータベースに伝える SQL 式を作成します。

DB の負担を軽減するために、以前の検索で必要なもの (つまり、ID と主キー) のみが返されるようにする必要があります。

于 2013-10-21T22:23:20.697 に答える