Submitted by ReKoNE on
Bonjour,
savez-vous comment on peut facilement altérer une requête générée par views pour y ajouter une jointure sur une table qui aurait plusieurs conditions de jointure ?
J'ai besoin d'arriver à un INNER JOIN qui corresponde à ça :
INNER JOIN {field_data_field_album_image_on_wall} field_data_field_album_image_on_wall ON field_data_field_album_images_coll.entity_id = field_data_field_album_image_on_wall.entity_id AND field_data_field_album_image_on_wall.field_album_image_on_wall_value = 1 AND field_data_field_album_image_on_wall.delta = field_data_field_album_images_coll.delta
Je tente de faire cette jointure avec le hook_views_query_alter mais il semble que la documentation de views_join ne soit pas à jour...
extra: An array of extra conditions on the join. Each condition is either a string that's directly added, or an array of items
J'ai essayé avec des conditions sous forme de chaînes de caractères :
<?php
/*
* Implementation of hook_views_query_alter()
*/
function MON_MODULE_views_query_alter(&$view, &$query) {
if ($view->human_name == 'MA_VUE' && $view->current_display == 'MON_AFFICHAGE') {
$join = new views_join();
$join->type = 'INNER';
$join->table = 'field_data_field_album_image_on_wall';
$join->field = 'entity_id';
$join->left_table = 'field_data_field_album_images_coll';
$join->left_field = 'entity_id';
// Following is not working as expected
$join->extra = array(
"field_data_field_album_image_on_wall.field_album_image_on_wall_value = 1",
"field_data_field_album_image_on_wall.delta = field_data_field_album_images_coll.delta",
);
$query->add_relationship('field_data_field_album_image_on_wall', $join, 'node', null);
}
}
?>
mais ça me génère ça :
INNER JOIN {field_data_field_album_image_on_wall} field_data_field_album_image_on_wall ON field_data_field_album_images_coll.entity_id = field_data_field_album_image_on_wall.entity_id AND (field_data_field_album_image_on_wall.f = 'f' field_data_field_album_image_on_wall.f = 'f')
Donc j'ai bien 2 conditions, mais elles ne correspondent pas à ce que j'attends ; elles sont tronqués et il manque un AND entre chacune.
Du coup j'ai testé avec un tableau d'items :
<?php
/*
* Implementation of hook_views_query_alter()
*/
function MON_MODULE_views_query_alter(&$view, &$query) {
if ($view->human_name == 'MA_VUE' && $view->current_display == 'MON_AFFICHAGE') {
$join = new views_join();
$join->type = 'INNER';
$join->table = 'field_data_field_album_image_on_wall';
$join->field = 'entity_id';
$join->left_table = 'field_data_field_album_images_coll';
$join->left_field = 'entity_id';
// Following is not working as expected
$join->extra = array(
array(
'table' => 'field_data_field_album_image_on_wall',
'field' => 'field_album_image_on_wall_value',
'value' => 1,
'numeric' => 1,
'extra type' => 'AND',
),
array(
'table' => 'field_data_field_album_image_on_wall',
'field' => 'delta',
'value' => 'field_data_field_album_images_coll.delta',
'numeric' => 1,
'extra type' => 'AND',
),
);
$query->add_relationship('field_data_field_album_image_on_wall', $join, 'node', null);
}
}
?>
ce qui me génère :
INNER JOIN {field_data_field_album_image_on_wall} field_data_field_album_image_on_wall ON field_data_field_album_images_coll.entity_id = field_data_field_album_image_on_wall.entity_id AND (field_data_field_album_image_on_wall.field_album_image_on_wall_value = '1' field_data_field_album_image_on_wall.delta = 'field_data_field_album_images_coll.delta')
Bon là on est pas trop mal mais il manque toujours mon AND entre les 2 conditions et le problème maintenant ce sont ces foutues apostrophes autour de mes valeurs même en spécifiant numeric = 1 contrairement à ce que dit la doc...
numeric: If true, the value will not be surrounded in quotes.
Est-ce que quelqu'un a une solution simple pour arriver à faire ceci ?
Merci pour votre précieuse aide !
La solution se trouve ici
Permalien Soumis par ReKoNE le 1 Août, 2013 - 17:51
La solution se trouve ici