2 votes

Laravel : obtenir des données à partir de plusieurs tables

J'ai un projets avec la valeur de la colonne suivante :

id_project   name           website         country_id  currency_id  timezone_id
==========.  ====           =======         ==========. ===========. ===========
1            project name.  www.yahoo.com.  10          8            10

et un pays avec la valeur de la colonne suivante :

id_country.      country_name
==========.      ============
10               America

et un monnaies avec la valeur de la colonne suivante :

id_currency      currency_name
===========      ============
8                BD

et un fuseaux horaires avec la valeur de la colonne suivante :

id_timezone      time_onze    country_name
===========      =========    ============
10               Asia/Dhaka   Bangladesh

Maintenant, je veux exécuter une requête qui devrait me donner nom , site web , nom_du_pays , fuseau horaire , nom_de_la_monnaie . MAIS vous pouvez voir le nom_du_pays existe dans les deux tables, ce qui est pays y fuseaux horaires . Ainsi, la requête devrait me donner le nom_du_pays de pays table NOT fuseaux horaires table.

Pour cela, je lance la requête suivante :

$projects = DB::table('projects')
->leftJoin('countries', 'projects.country_id', '=', 'countries.id_country')
->leftJoin('currencies', 'projects.currency_id', '=', 'currencies.id_currency')
->leftJoin('timezones', 'projects.timezone_id', '=', 'timezones.id_timezone')
->get(['name', 'website', 'code', 'projects.currency_name', 'time_zone']);

return response()->json($projects, 200);

Mais je n'arrive pas à obtenir les données

Message d'erreur :

"SQLSTATE[42S22] : Colonne introuvable : 1054 Colonne inconnue 'projects.currency_name' dans 'field list' (SQL : select name , website , code , projects . currency_name , time_zone de projects jointure gauche countries sur projects . country_id = countries . id_country jointure gauche currencies sur projects . currency_id = currencies . id_currency jointure gauche timezones sur projects . timezone_id = timezones . id_timezone )"

1voto

Hafid Maulana Points 25

Essayez ceci

$projects = DB::table('projects')
->leftJoin('countries', 'projects.country_id', '=', 'countries.id_country')
->leftJoin('currencies', 'projects.currency_id', '=', 'currencies.id_currency')
->leftJoin('timezones', 'projects.timezone_id', '=', 'timezones.id_timezone')
->get(['projects.name', 'projects.website', 'currencies.currency_name', 'timezones.time_zone']);

return response()->json($projects, 200);

ou avec l'aide à la sélection

$projects = DB::table('projects')
->leftJoin('countries', 'projects.country_id', '=', 'countries.id_country')
->leftJoin('currencies', 'projects.currency_id', '=', 'currencies.id_currency')
->leftJoin('timezones', 'projects.timezone_id', '=', 'timezones.id_timezone')
->select(
['projects.name', 'projects.website', 'currencies.currency_name', 'timezones.time_zone']
)
->get();

return response()->json($projects, 200);

Il n'y a pas de code dans votre base de données. Je ne l'ai donc pas incluse. Désolé pour mon mauvais anglais

J'espère que cela vous aidera

1voto

Atiqur Points 1

En fait, vous faites une requête erronée

$projects = DB::table('projects')
->leftJoin('countries', 'projects.country_id', '=', 'countries.id_country')
->leftJoin('currencies', 'projects.currency_id', '=', 'currencies.id_currency')
->leftJoin('timezones', 'projects.timezone_id', '=', 'timezones.id_timezone')
->get(['projects.name', 'projects.website, 'currencies.currency_name', 'timezones.time_zone']);

return response()->json($projects, 200);

Je ne vois aucun code La colonne permet de s'assurer de son origine.

0voto

Hassan Javed Points 50

Il y a une erreur dans votre sélection de colonnes. Comme tous les noms de colonnes sont uniques, vous pouvez tout à fait ignorer l'ajout du nom de la table devant les colonnes.

$projects = DB::table('projects')
->leftJoin('countries', 'projects.country_id', '=', 'countries.id_country')
->leftJoin('currencies', 'projects.currency_id', '=', 'currencies.id_currency')
->leftJoin('timezones', 'projects.timezone_id', '=', 'timezones.id_timezone')
->get(['name', 'website', 'currency_name', 'time_zone']);

return response()->json($projects, 200);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X