Drupal(ビューバージョン3、Drupalバージョン7)のビューのクエリを変更しようとしています。テーブルの追加、場所、および並べ替えビューのビューviews_query_alter()のクエリ
実行したいのは、実行する前にクエリを変更して、ノードにウェイトが割り当てられているテーブルをLEFTジョインすることです。
私はSQLにするクエリを書くことだった場合、それは次のようになります。
SELECT a.nid, a.title, a.description
FROM node a
LEFT OUTER JOIN node_weights b
ON a.nid = b.nid
WHERE b.uid = $uid
ORDER BY b.weight DESC
私は、クエリアナライザでそれを実行すると、このクエリはチャンピオンのように動作します。だから、私は自分のモジュールで動作させる必要があります。
ビューのクエリを変更するさまざまな方法について、さまざまなブログで詳しく説明されている複数のアプローチがありますが、異なるバージョンのビューに対処しているようです。だから、私が見ているものが私のアプリケーションのために働く可能性があるかどうかを判断しようとするのは非常に混乱します。
私が関係が、私は参加したいテーブルとノードテーブルの間でどのような見解を伝えるためにMODULE_NAME_views_tables()関数を使用する必要があるようです。
function MODULE_NAME_views_tables() {
$tables['node_weights'] = array(
"name" => "node_weights",
"join" => array(
"left" => array(
"table" => "node",
"field" => "nid"
),
"right" => array(
"field" => "nid"
),
),
);
return $table;
}
これが働いているように見えるん私はクエリ配列を見てKrumoを使用する場合、私は私の「node_weights」の表を参照してくださいので、私はMODULE_NAME.views.incに以下の機能を追加しました
「table_queue」要素に格納されます。 views_query_alter()関数で
、私はそれがこのような何かを仕事したいと思います:
function MODULE_NAME_views_query_alter(&$view, &$query) {
$uid = $_COOKIE['uid'];
$view->query->add_relationship('node_weights', new views_join('node_weights', 'nid', 'node', 'nid','LEFT'));
$view->query->add_where('node_weights', "node_weights.uid", $uid);
krumo($query);
}
この機能はかなりひどくbarfs。私の結合テーブルは$ viewオブジェクトに現れていますが、add_relationshipメソッドは3番目の引数にエラーを投げていますが、3つの引数を持つオンラインの例はありません。
また、私のadd_whereメソッドが正しくないことは確かですが、入力が実際にどのようなものになるかはわかりません。これは盲目の推測です。
node_weightsテーブルにノードテーブルを参加させ、そのクエリで重みを使用して降順で結果を並べ替えることを確認します。ここで、ユーザーID =ユーザーIDテーブルに格納され、テーブルはnidフィールドで結合されます。
ありがとうございます。
私はできませんなんらかの理由で私自身の質問に答えを投稿するが、私はこれに対する解決策を見つけたので、コメントで説明しようとする。 – user830694
最初のステップは、HOOK_views_table()を使用して新しいテーブルの結合におけるデータ関係を記述する関数を設定することです。 – user830694
次のステップは、HOOK_views_query_alter()関数を作成することです。この機能の中には、いくつかの項目を追加する必要があります。 – user830694