Ich habe eine MariaDB-Abfrage, die ich in meiner Laravel-Anwendung verwende, und möchte, dass 7 Spalten zurückgegeben werden. Wenn ich das resultierende Array mit PHP speichere, scheint es nur 4 zurückzugeben. Wenn ich jedoch dieselbe Abfrage nehme und sie im PhpMyAdmin SQL-Editor ausführe, werden alle 7 genau so zurückgegeben, wie ich es erwarten würde.

Sie haben sich nur gefragt, warum Laravel die Ergebnisse möglicherweise nur nach vier Spalten, Status, Name, Telefonnummer und Beschreibung filtert.

Vielen Dank!

Laravel-Abfrage:

    $entries = DB::select('SELECT status, contacts.name, contacts.telephone_number, companies.name, roles.name, stages.description, actions.description FROM entries JOIN contacts ON entries.contact_id = contacts.id JOIN companies ON contacts.id = companies.contact_id JOIN roles ON companies.id = roles.company_id JOIN stages ON roles.id = stages.role_id JOIN actions ON stages.id = actions.stage_id');

Query output in Laravel

Abfrage für PHPMyAdmin SQL Editor:

    SELECT status, contacts.name, contacts.telephone_number, companies.name, roles.name, stages.description, actions.description FROM entries JOIN contacts ON entries.contact_id = contacts.id JOIN companies ON contacts.id = companies.contact_id JOIN roles ON companies.id = roles.company_id JOIN stages ON roles.id = stages.role_id JOIN actions ON stages.id = actions.stage_id

Query output in PHPMyAdmin

1
Robert Young 17 Aug. 2020 im 14:15

2 Antworten

Beste Antwort

In beiden Fällen ist es das gleiche Ergebnis. Sie verwenden nur dasselbe Attribut, sodass sich das Ergebnis in beredter Sprache gegenseitig überschreibt. Verwenden Sie Aliase, um das Problem zu beheben

SELECT status, contacts.name as contact_name, contacts.telephone_number, companies.name as company_name, roles.name as role_name , stages.description, actions.description FROM entries JOIN contacts ON entries.contact_id = contacts.id JOIN companies ON contacts.id = companies.contact_id JOIN roles ON companies.id = roles.company_id JOIN stages ON roles.id = stages.role_id JOIN actions ON stages.id = actions.stage_id
2
N69S 17 Aug. 2020 im 11:20

Wie @ N69S antwortete, sollten Sie Aliase festlegen, um das Überschreiben zu vermeiden. Eine andere Sache, wenn Sie Laravel verwenden, ist Ihr Freund beredt:

$entries = DB::table('entries')
    ->join('contacts', 'entries.contact_id', '=', 'contacts.id')
    ->join('companies', 'contacts.id', '=', 'companies.contact_id')
    ->join('roles', 'companies.id', '=', 'roles.company_id')
    ->join('stages', 'roles.id', '=', 'stages.role_id')
    ->join('actions', 'stages.id', '=', 'actions.stage_id')
    ->select('status', 'contacts.name AS contact_name', 'contacts.telephone_number', 'companies.name AS company_name', 'roles.name AS role_name', 'stages.description AS stage_description', 'actions.description AS action_description')
    ->get();

Ein besserer Ansatz wird darin bestehen, Modelle zu verwenden und Beziehungen festzulegen.

1
HTMHell 17 Aug. 2020 im 11:31