要するに、次のようになります。
$collection->
addAttributeToFilter(
array(
array('attribute' => 'cl_designer', 'eq' => ''),
array('attribute' => 'cl_designer', 'neq' => '')
))->
joinTable(array('cl_designer_value'=>'eav_attribute_option_value'),'option_id = cl_designer', array('cl_designer_value' => 'value'))->
addAttributeToFilter('cl_designer_value', array('like' => $filter));
最初の addAttributeToFilter は、適切な catalog_product_entity_int テーブルを含め、entity_id、attribute_id、および store_id によって適切に結合するために必要です。次に、joinTable を使用して eav_attribute_option_value に接続します。
joinTable は複雑です。最初の引数は、フォーム alias => tablename の、結合するテーブルの配列です。テーブル名は生の名前 (ここのように) または標準のマジェント スラッシュ表記にすることができます。2 番目の引数は、「primary=attribute」という形式の文字列です。= の左側にあるものは、結合に使用するこのテーブルの列であると見なされ、= の後にあるものは属性コードであると見なされます。次に、指定された属性コードを結合で使用する適切な table.column に変換しますが、テーブルが見つからない場合は追加しません。そのため、最初の addAttributeToFilter が必要でした。
joinTable の次の引数も必要で、これは alias => column という形式の配列であり、その各エントリはエイリアスによって参照できます。 cl_designer_value.value (tablealias.column) を cl_designer_value として参照できます。
joinTable の後、cl_designer_value を他の属性コードとして扱い、通常どおり使用できるようになりました。
joinTable は属性コードによってテーブルを結合することに注意してください。ただし、テーブルを結合すると、fields 配列 (3 番目の引数) で指定した属性コードが次の結合で使用できるようになります。そのため、必要に応じて joinTable への複数の呼び出しを連鎖させることができます。