TabellenstrukturEloquent: Wie finden Sie in Textfeldern über polymorphe Beziehungen?
entity
id - integer
title - string
...
person
id - integer
name - string
...
customers
id - integer
body - text
concrete_id - integer
concrete_type - string
Modelle:
class Customer extends Model
{
...
public function concrete()
{
return $this->morphTo();
}
...
}
Person und Entity-Modelle haben
public function customers()
{
return $this->morphMany(Customer::class, 'concrete');
}
Wie alle Kunden zu finden, wo Typ 'Einheit' ist und wo berechtigt y.title = 'abc'?
Ich versuche, so etwas tun,
$obj = Customer::whereHas(['concrete' => function($query){
$query->where('title', 'like', 'foo%');
}])->get();
aber ich habe einen Fehler:
ContextErrorException in Builder.php line 825: Warning: strpos() expects parameter 1 to be string, array given
Zum Beispiel, ich kann dies tun über native MySQL Anfrage:
SELECT *
FROM `customers`
LEFT JOIN `entities` ON (entities.id = customers.concrete_id)
WHERE `concrete_type` = "entity" AND entities.title LIKE "%foo%"
Wie macht man das über Eloquent?
hmm, nein, das dosn't Arbeit beacause in diesem Fall konkrete Modell geben nicht definiert. Personenmodell habe keine Titelspalte. Ich brauche nur Suchtext-Kunden vom Entitätstyp. – Stanislav
Ich bin interessiert :) ... update antwort –
Ihre zweite Methode ist gut funktionieren. Aber das Problem ist, dass diese Lösung die Sammlung von Entity Models zurückgibt. Aber ich brauche die Sammlung des Kunden. Ich aktualisierte die Frage und fügte die Beispiellösung über native SQL-Anfrage hinzu. Schau es dir an und du verstehst das Problem besser. – Stanislav