Laravel get Eloquent relation by same name as its attribute

后端 未结 3 1362
攒了一身酷
攒了一身酷 2021-01-18 11:44

I have database tables like this:

shoot: id, name, programme
programme: id, name

The eloquent relationship in the shoot is defined like thi

相关标签:
3条回答
  • 2021-01-18 12:29

    You shouldn't use the same name for the both relationship and column name, else you'll receive always the column name so try to edit one of them, I think the easiest one here is the relationship name :

    public function programmeObj() {
        return $this->belongsTo('App\Programme', 'programme', 'id');
    }
    

    Then call it as :

    echo $shoot->programmeObj;
    

    NOTE : But if you want to follow conventions you should replace the name attribute by programme_id so :

    public function programme() {
        return $this->belongsTo('App\Programme', 'programme_id', 'id');
    }
    

    Hope this helps.

    0 讨论(0)
  • 2021-01-18 12:35

    To achieve what you after you will need to do the following:

    $shoot = Shoot:where('id','=',1)->with('programme')->first();
    $variable = $shoot->programme; // returns 1
    $obj = $page->getRelationValue('programme') // returns App\Programme object.
    
    0 讨论(0)
  • 2021-01-18 12:41

    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:

    public function programmeData() {
        return $this->belongsTo('App\Programme', 'programme', 'id');
    }
    

    And your controller:

    $shoot = Shoot:where('id','=',1)->first();
    return $shoot->programmeData->name; // returns name
    

    Hope this works!

    0 讨论(0)
提交回复
热议问题