父表
public function profile()
{
return $this->hasOne('App\Profile','user_id');
}
关系
profiles
schema | 'id','user_id'/*foreign key to users table */ ,'address','city'
其他表
public function user()
{
return $this->belongsTo('App\User','id');
}
关系
Profile
我正在查询User
模型,希望能够使用public function edit($id){
$profile = \App\Profile::with('user')->where('id','=',$id)->get();
dd($profile);
}
模型进行加载。
User
这样我就可以加载用户的个人资料以进行编辑,以及来自email
模型的详细信息数据,例如pass
& user
等。
这返回$profile->user->email
的空关系?
此外,在刀片中,当访问dd()
时会出错
未定义属性:Illuminate \ Database \ Eloquent \ Collection :: $ user (视图: C:\ XAMPP \ htdocs中\ laravel1 \资源\视图\轮廓\ edit.blade.php)
以下是user
输出http://bit.ly/1dA0R5p
它返回带有undefined property
关系的null,这是我怀疑在刀片中导致User
错误。
这种方法可行吗?我的关系是否正确?
P.S。之前我在查询Profile
模型和eagerload $users = \App\User::with('group','profile')->get(); //This was working
模型时遇到了反之亦然的情况。
段
{{1}}
答案 0 :(得分:0)
您收到null
因为您的关系定义错误。您的profile
模型应为
public function user()
{
return $this->belongsTo('App\User','user_id');
}
错误是因为您试图从集合中获取user
对象。
由于您已使用get()
检索数据,因此您收到的是配置文件集合,而不是单个配置文件。如果您想要一个配置文件,请使用first()
方法而不是get()
,否则在循环中使用它。
@foreach ($profiles as $profile)
{{ $profile->user->email }}
@endforeach
答案 1 :(得分:0)
如果子模型中存在此行,则删除use SoftDeletes;
。
namespace App;
use Illuminate\Database\Eloquent\Model;
//use Illuminate\Database\Eloquent\SoftDeletes;
use App\User;
class Profile extends Model
{
// use SoftDeletes;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'profile';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['address', 'user_id'];
protected $primaryKey = 'user_id';
public function user() {
return $this->belongsTo('App\User');
}
}
现在设置$primaryKey = 'user_id';
在oparent Model中:
public function profile(){
return $this->hasOne('App\Profile');
}
因此您可以检索用户个人资料
$profile = $user->profile? : new Profile;