0

私はlaravelの初心者で、ドキュメンテーションに従おうとしています。そのため、「User」モデルと「UserPhone」モデルの2つのモデルがあります。ユーザーは多数の電話を持っています。

ユーザーモデル:

public function userPhone() {    
    return $this->hasMany('UserPhone');
}

UserPhone モデル:

public function user(){
    return $this->belongsTo('User');
} 

私のコントローラーで、ドキュメントを「コピー」しようとしています:

$userPhone = User::find(1)->userPhone;

結果はエラーです:

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

ここで何かが足りないことはわかっていますが、見つかりません。

4

5 に答える 5

1

IDが1のユーザーがいないことは確かです。

$userPhone = User::find(1)->userPhone;

これは機能するはずですが、最初の部分でユーザーが見つからない場合:

User::find(1)

NULL を返しますが、NULL はオブジェクトではありません。エラーが発生しますTrying to get property of non-object

私のアドバイスは、これをやってみてください

var_dump( User::find(1) );

NULL のみを受け取った場合は、問題が見つかりました。

于 2013-08-07T21:46:33.643 に答える
0

その関係は自動的に読み込まれます。

$user = User::find(1);
echo $user->userPhone->id;

これは、データベーステーブルがlaravelの規則に従って正しく設定されており、実際にIDが1のユーザーがいると仮定しています.

于 2013-08-08T12:25:54.223 に答える
0

答えは、すべてが大丈夫だったということです!たまたま離れていた

 use Illuminate\Auth\UserInterface;
 use Illuminate\Auth\Reminders\RemindableInterface;

UserPhone Model Class 宣言の前に..それは初心者の間違いでした。

于 2013-08-08T23:43:50.567 に答える
0

関連する電話番号 (userPhone) を持つユーザーを取得する場合は、Eager Loadingを使用できます。

//get all users (User) with their respective phonenumbers (userPhone)
$users = User::with('userPhone')->get() 

//get User with id==1, with his related phonenumbers (userPhone of User(1))
$user_1 = User::with('userPhone')->where('id',1)->first() 

そして、あなたができるよりも

if(!is_null($user))
$phones_of_user_1 = $user_1->userPhone();
else
$phones_of_user_1 = array();

そうすれば、id==1 のユーザーが存在する場合、そのユーザーの電話番号を取得できます。それ以外の場合は、空の配列が返され、例外/エラー (オブジェクト以外のプロパティを取得しようとしている) がスローされません。

于 2013-08-08T09:46:32.900 に答える