2
votes

PHP Laravel éloquent avec plusieurs bases de données, sélectionnez quelque chose

J'utilise deux connexions de base de données dans mon projet Laravel.

Je dois modifier les tables dans les deux bases de données.

J'ai tout configuré et maintenant je joue et j'essaie d'obtenir des données depuis la première et la deuxième base de données, mais la documentation ne donne guère d'informations sur la façon de le faire, je n'ai trouvé que ceci:

$users1 = DB::connection('mysql_live')->User::all();

Y a-t-il plus de ressources quelque part? Je n'ai rien trouvé.

Jusqu'à présent, je comprends que je ne peux plus utiliser éloquent si j'utilise plusieurs bases de données? Au moins, je ne peux pas utiliser éloquent pour la deuxième base de données, qui n'est pas par défaut.

Pour les tests, j'ai créé les mêmes tables sur les deux bases de données avec des données différentes. Mais je ne peux pas interroger les données, j'obtiens toujours cette erreur:

 $users1 = DB::connection('mysql_live')->select('SELECT * FROM users');
 info($users1);

 $users2 = DB::connection('mysql')->User::all();
 info($users2);

Voici mes tests:

Undefined property: Illuminate\Database\MySqlConnection::$User

J'ai aussi essayé:

$users = DB::connection('foo')->select(...);

Le mieux serait la documentation sur la façon d'utiliser correctement DB :: connection et de sélectionner, modifier, insérer des données, etc. p>

MODIFIER

  • Comment puis-je réellement par ex. sélectionner tous les utilisateurs des deux bases de données?
  • Pour la deuxième base de données, je n'aurai jamais besoin de créer de nouvelles colonnes ou tables, je n'aurai besoin que de mettre à jour les données, probablement pas éloquent là-bas, ce qui signifie que j'ai toujours besoin d'exécuter du SQL brut, n'est-ce pas? Si j'utilise Eloquent, je dois également créer les modèles?


0 commentaires

3 Réponses :


2
votes

Ceci est possible avec la méthode setConnection

$someModel = new SomeModel;
$someModel->setConnection('foo');
$something = $someModel->find(1);
return $something;


0 commentaires

0
votes

Essayez ce code,

vous devez d'abord définir la config

 $result=DB::connection('mysql_live')->table('users')->get();

puis

Config::set('database.connections.mysql_live.database', 'dbname');
Config::set('database.connections.mysql_live.host','localhost');


0 commentaires

5
votes
$users = User::get();

4 commentaires

Merci beaucoup, très utile. J'ai juste compris que je n'ai pas besoin de changer quoi que ce soit pour la base de données par défaut.


Heureux d'avoir aidé :)


Mon problème est de savoir comment connaître cette syntaxe: -> table ('users') -> get () -> toArray (); . Le docu laravel est vraiment génial, mais la partie sur plusieurs bases de données est pauvre, il n'y a qu'une seule ligne: $ users = DB :: connection ('foo') -> select (...); . Mais je peux comprendre cela étape par étape.


Donc, fondamentalement, celui-ci transforme votre sortie de la table users dans un tableau afin que vous puissiez l'utiliser. Vous pouvez le stocker dans une variable et y accéder sous forme de tableau. Vous pouvez en savoir plus ici sur cette collection: laravel.com/docs/5.8/ collections # method-toarray