【发布时间】:2017-12-13 07:43:20
【问题描述】:
我在我的 laravel 应用程序 users 和 addresses 中有 2 个表,它们都在工作,我想做的是:
- 为每个用户设置多个地址(完成)
- 设置主要地址(在订单设置和个人资料页面中选择的能力)
问题是:
我是否需要第三张表(例如 address_user)来获取用户和地址 ID,或者现在我只需将 primary 列添加到地址表中即可?
这是我所拥有的:
user型号
public function addresses(){
return $this->hasMany(Address::class);
}
Address型号
public function user(){
return $this->belongsTo(User::class);
}
Address table
Schema::create('addresses', function (Blueprint $table) {
$table->increments('id');
$table->string('address');
$table->string('city');
$table->string('postalcode')->nullable();
$table->string('province');
$table->integer('user_id')->unsigned();
$table->timestamps();
});
Schema::table('addresses', function (Blueprint $table) {
$table->foreign('user_id')->references('id')->on('users');
});
这就是我当前在用户索引中打印数据的方式
<td class="text-center">
<ol>
@foreach($user->addresses as $uad)
<li>{{$uad->address}}<br>{{$uad->city}},{{$uad->postalcode}},{{$uad->province}}</li>
@endforeach
</ol>
</td>
更新
因此,根据建议,我将列 is_primary 添加到我的 addresses 表中,我可以设置为 0 和 1 以获取用户的主要地址,但是
现在我在我的用户编辑页面中,我有 2 个地址属于用户 id
1现在我想将选定的主地址更改为另一个 地址,但我在用户个人资料中编辑我如何更新我的地址表is_primary列,而我的表单路径是users.update而不是addresses_update?
更新 2
我做了一些改动,这里是:
- Users 表有
address_id列 - 地址表不再有
is_primary列。 为什么?因为用户可以将许多地址设置为主要地址!通过这种方式,用户只能将 1 个地址设置为主地址,这将获得该地址的 id。
问题
1- 我无法获取用户主地址(不知道如何!)
这是我获取用户地址的方法:
@foreach($user->addresses as $address)
<p>
{{$address->address}}<br>
{{$address->city}}, {{$address->province}}<br>
{{$address->country}}<br>
{{$address->postalcode}}
</p>
@endforeach
但我无法获取用户主地址。
【问题讨论】:
-
您仍然可以保留您的地址,只需添加名为
public function primaryAddress() { return $this->address->where('is_primary',1) }的新方法 -
@user2749200 我更新了我的问题,请看一下。
-
您传递所选地址的 id 并在您的控制器中设置
is_primary1 的值。并保存应类似于 $user->address()->save($address) 的地址;` 仅供参考,您可能还需要将第一个主地址is_primary更新为 0