事情就是这样,我正在使用Laravel 4,我有一个用户个人资料更新页面,供他们更新其个人资料。创建用户后,对其他表格(如地址,城市,国家/地区,性别)将一无所获。意思是,他仅出现在用户表中。现在,当他更新时,应该在这些表中为此用户创建他的个人资料条目。
这是我的问题,我试图在输入字段中显示存储在数据库中的值。仅当用户在每个表中都有一个条目时,它才可以正常工作,否则,因为$ address-> addressline1是一个非对象,否则就不能了。
这是显示更新页面的控制器代码:
public function getProfileUpdate() {
$user = User::where('id', '=', Auth::user()->id);
$countries = Country::all();
if ($user->count()) {
$user = $user->first();
$address = Address::where('id', '=', $user->address_id);
if ($address->count()) {
$address = $address->first();
$city = City::where('id', '=', $address->city_id);
if ($city->count()) {
$city = $city->first();
$country = Country::where('id', '=', $city->country_id);
if ($country->count()) {
$country = $country->first();
}
}
} else {
// WHAT SHOULD I DO?? tried many thing but they all return as non objects...
}
$gender = Gender::where('id', '=', $user->gender_id);
if ($gender->count()){
$gender = $gender->first();
} else {
$gender = [];
}
return View::make('profile.update')
->with('countries', $countries)
->with('country', $country)
->with('city', $city)
->with('address', $address)
->with('gender', $gender)
->with('user', $user);
}
return App::abort(404);
}
这是更新页面视图中的输入示例。
<div class="field">
<label for="addressline1">Address line 1</label>
<input class="form-control" type="text" name="addressline1" {{ (Input::old('addressline1')) ? ' value="' . e(Input::old('addressline1')) . '"' : ' value="' . e($address->addresline1) . '"' }}>
@if ($errors->has('addressline1'))
<div class="alert alert-warning" role="alert">
{{ $errors->first('addressline1') }}
</div>
@endif
</div>
您将如何解决?我觉得有些事情做起来很简单,但我没有看到……!
首先,我建议您再次阅读Eloquent文档并了解模型之间的关系。
如果您的表之间存在一对一关系。您可以使用以下代码。
$address = new Address; //Use in your else block
或者
$address= Auth::user()->address ? : new Address; //For this you have to define Relation
还有一点,
/*Don't use this*/
$gender = Gender::where('id', '=', $user->gender_id);
/*Define Relation Between User and Gender Model this is better*/
$gender = Auth::user()->gender;
最后,做您正在做的事情的最佳方法是使用“急切加载”。例如
Auth::user()->with('address.city.country' , 'gender')
此代码将在同一对象中加载User,Adress,City,Country。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句