Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
294 views
in Technique[技术] by (71.8m points)

Laravel Eloquent relationship data retrieve

I have below code to get data from database,

 $profile = Profiles::find(1);
 $currency = Profiles::find($profile->currency_id)->currency;

Then created a relationship in the model as below,

class Profiles extends Model
{
    use HasFactory;

    protected $table = 'Profiles';
    protected $primaryKey = 'profile_id';

    public function Currency()
    {
        return $this->belongsTo(Currencies::class, 'currency_id');
    }
}

class Currencies extends Model
{
    use HasFactory;

    protected $table = 'Currencies';
    protected $primaryKey = 'currency_id';

    public function profile()
    {
        return $this->hasOne(Profiles::class, 'currency_id');
    }
}

Problem is that there is only 1 profile and 100 currency, currency_id is a foreign key in Profiles table,

I could not get data and get this error, Trying to get property 'currency' of non-object"

If i use $currency = Profiles::find(1)->currency; then it retrieve first row of Curriencies table which is not required data.

How can I get currency row for that specific profile?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The problem is that the find() method will look for the primaryKey and in your second call the currency_id is not the pk. Two solution for you:

  • replace the find by a where clause like so: $currency = Profiles::where('currency_id',$profile->currency_id)->value('currency')
  • Or a more Laravel way to do it, through the relationship $currency = $profile->currency;

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...