Hali!
Nem biztos, hogy jó topikban vagyok, de mivel van ebben egy kis laravel, meg egy kis adatbázis, meg jó sok bénázás ide írok, tudom, hogy bírjátok ezeket /s
Tök rég használtam Laravel-t, csomó mindent elfelejtettem. Most újra elkezdtem egy projekt folyamán nyomkodni, azonban nagyon nem tudom még mindig felfogni, hogy hogyan működnek az adatbázis foreign key-ek. Leírnám gyorsba, hogy mi alapján terveztem a webappot (igazából egy REST API-t csinálok épp egy mobil appnak, csak még tesztelgetek), és mutatom, hogy hol nem vágom mi történik és miért. Vagy lehet az lenne egyszerűbb, hogy hol vágom.
Az app alapvetően egy szolgáltatás kereső lenne, szépen térképen mutassa, hogy mik vannak a közeledben, tudsz majd kategóriák vagy keresőszavak alapján szűrni, az adott helyre kattintva pedig meg tudod nézni az adott hely részletes leírását.
Szóval ez az adatbázis szerkezetem:
(az OK feliratok elhanyagolandók, magamnak jeleztem, hogy megcsináltam hozzá a migrációt)
Elég sok minden össze van foreign key-el kötve. A migrációban tökéletesen értem, hogy hogy működik, itt egy példa az ott használt Schema-ra:
Schema::create('reviews', function (Blueprint $table) {
$table->increments('id');
$table->integer('review_score');
$table->text('review_text')->nullable();
$table->integer('user_id')->unsigned();
$table->timestamps();
$table->foreign('user_id')
->references('id')
->on('users');
});
.. de hát ez egyszerű is mint a bot.
Ahol megakadok, az a Modeleken belül az Eloquent relációk berakása.
Itt van például a Company modelem, ami ugye a companies táblához kapcsolódik:
class Company extends Model
{
protected $fillable = [
'company_name', 'user_id'
];
public function venue() {
$this->hasMany('App\Venue');
}
public function user() {
$this->belongsToMany('App\User');
}
}
Itt a venue() lenne a fontos. Szóval azzal, hogy megmondjuk neki, hogy hasMany(Venue), magyarra lefordítva azt mondjuk, hogy egy céghez több hely is rendelhető (mondjuk pl étterem, kávézó stb). Ez teljesen rendben van, ez lenne a cél.
Itt a Venue Modelem releváns része:
public function company(){
$this->belongsTo('App\Company');
}
.. amivel ugye azt mondjuk, hogy egy étterem például csak és kizárólag egy céghez tartozhat.
Szóval hacsak nem vagyok baromi nagy gyökér, eddig értem.
A probléma ott van, hogy controllerbe csinálok egy ilyent:
$venue = new Venue();
$venues = $venue->all();
return View('test', compact('venues'));
... ezzel ugye lekérjük az összes szolgáltatást/helyet/stb és átadjuk a View-nak. A view-ban pedig próbálnám kiírni a venue-hoz tartozó infókat, így:
@foreach($venues as $venue)
<tr>
<td>{{ $venue->id }}</td>
<td>{{ $venue->name }}</td>
<td>{{ $venue->description }}</td>
<td>{{ $venue->phone_number }}</td>
<td>{{ $venue->email }}</td>
<td>{{ $venue->address }}</td>
<td>{{ $venue->lat }}</td>
<td>{{ $venue->lon }}</td>
<td>{{ $venue->website }}</td>
<td>{{ $venue->company->company_name }}</td>
</tr>
@endforeach
Erre kapok egy ilyen hibaüzenetet:
De ha kiveszem a legutolsó sort, tehát a $venue->company->company_name-et, akkor pedig tökéletesen megy. Meg ház írja is az exception, hogy a relációkkal van baj.
Szóval a kérdésem az lenne, hogy mit rontok el, mit nem értek? Esetleg nem fogtam fel valami nagyon triviális dolgot?
Köszönöm!
Bocsi a megfogalmazásért + formázásért, baromi fáradt és ideges vagyok már, nem nagyon tudtam koncentrálni
https://heureka-kreativ.hu