web-dev-qa-db-ja.com

Laravel belongsTo関係-非オブジェクトのプロパティを取得しようとしています

User.php

class User extends Authenticatable
{
    public function company() {
        return $this->belongsTo('App\Company');
    }
}

Company.php

class Company extends Model
{
    public function users() {
        return $this->hasMany('App\User');
    }
}

テーブルユーザー

iD名Companies_id

テーブル会社

iD名

ユーザーに関連付けられている会社の名前を取得しようとしています。

$user = User::findOrFail(Auth::user()->id);
$companyName = $user->company()->first()->name;

このエラーメッセージが表示されましたTrying to get property of non-object

不足しているものを取得できません...よろしくお願いします

10
Léo Coco

デフォルトでは、Eloquentはリレーションシップの名前+ '_id'を使用して外部キーを推測します。

ソリューションA

public function company() {
    return $this->belongsTo('App\Company', 'companies_id')
}

ソリューションB

public function companies() {
    return $this->belongsTo('App\Company')
}
9
Léo Coco

また、company_idフィールドがnullの場合もあります。

そのため、ループでフィールドをチェックする必要があります

f.e

foreach($users as $user) 
{
   if(isset($user->company->title)): 

     echo  $user->company->title;
   else:

     echo 'empty';
   endif;

}
2
Turan Zamanlı

「最初の」方法なしで試してください。

$companyName = $user->company()->name;
1
brunohdaniel