Ich baue eine Abfrage mit einem JOIN. Dies ist das erste Mal, dass ich db-Sachen mit Active Record gemacht habe und ich habe ein bisschen einen Haken gefunden.CodeIgniter ActiveRecord Feldnamen in der JOIN-Anweisung
Ich möchte einen Tisch companies
zum users
Tabelle namens beitreten, so kann ich den Namen der Firma bekommen etc der Benutzer ist, ich habe wie so erfolgreich, diese Art von getan.
function get_profile_by_username($username)
{
$this->db->join('companies', $this->table_name.'.company_id = companies.id');
$this->db->where('LOWER(username)=', strtolower($username));
$query = $this->db->get($this->table_name);
if ($query->num_rows() == 1) return $query->row();
return NULL;
}
jedoch Das Problem ist, dass die Felder in companies
, sie sind id
und name
sind in diesem Objekt als einfach name
zurückgegeben.
Normalerweise, wenn ich die rohe Abfrage schreiben würde, würde ich Aliase zu den Tabellen geben und das Ergebnis wäre etwa u.company_id
, c.name
. Ich würde also wissen, name
hatte nichts mit dem Benutzer zu tun, aber natürlich ist der Name des Unternehmens. Und obwohl jetzt kein Problem, aber potenziell in der Zukunft, die id
Spalte kann natürlich nicht in der Ergebnismenge koexistieren, so wird man überschrieben!
Wie können wir diese Art der Unterscheidung zwischen den Feldern erhalten, die von bestimmten Tabellen kommen? Oder gibt es eine bessere Möglichkeit, über Tabellenverknüpfungen zu arbeiten und mit verknüpften Abfragedatensätzen/-objekten zu arbeiten?
Edit:
Wenn ich es als eine rohe Abfrage tun würde ich tun:
SELECT u.id, u.username, c.name
FROM users AS u
JOIN companies AS c
ON c.id = u.company_id
WHERE u.username = 'foobar';
Das ist sehr gut, aber wenn ich versuche, dass ich in aktiver Datensatz zu tun rechnen, das ist ziemlich schlechte Praxis wenn es überhaupt funktioniert.
Ich dachte, ich müsste vielleicht darauf zurückgreifen, aber ich war nicht zuversichtlich, dass ich in der Lage wäre, so zu wählen. Wie gebe ich dann Aliase zu den Tabellen wie mein Beispiel, so etwas wie '-> get ('user AS u')'? Wäre das mit allen ActiveRecord-Datenbankzielen kompatibel? – deed02392
@ deed02392 überprüfen, aktualisiert Code – safarov
OK, das ist, wie ich dachte. Der "AS" -Operator ist Standard-SQL-Recht, setzt er den Alias in allen db-Sprachen? Oder wird das nur in Zertifikaten funktionieren? – deed02392