I have database tables like this:
shoot: id, name, programme
programme: id, name
The eloquent relationship in the shoot is defined like this:
public function programme() {
return $this->belongsTo('App\Programme', 'programme', 'id');
}
When using dd()
, I can see this is working correctly:
dd(Shoot:where('id','=',1)->with('programme')->first());
// prints the object with programme listed under the relationship
However when I eager-load the shoot and attempt to get the programme object, I retrieve the shoot attribute "programme" instead. E.g.:
$shoot = Shoot:where('id','=',1)->with('programme')->first();
echo $shoot->programme; // returns 1, not App\Programme object.
Is there a solution to this without having to rewrite masses of the codebase?
You shouldn't use the same name for the both
relationship
andcolumn
name, else you'll receive always thecolumn
name so try to edit one of them, I think the easiest one here is therelationship
name :Then call it as :
NOTE : But if you want to follow conventions you should replace the name attribute by
programme_id
so :Hope this helps.
To achieve what you after you will need to do the following:
This will returns always the column in your database if it exists, that's ID 1.
When you call
dump($shoot);
you should get the array with all attributes. But when you run the following you should get the name:Your model:
And your controller:
Hope this works!