我对多对多关系的数据有疑问,首先我将放置我的模型和 Controller ,我使用 laravel 5.3
模型列出地址
class ListsAddresses extends Model
{
protected $table = "addresses";
protected $fillable = ['state', 'city', 'street_number', 'neighborhood', 'cp'];
public function lists()
{
return $this->belongsToMany('App\Admin\Models\Lists', 'list_has_addresses' , 'address_id', 'list_id');
}
public function user(){
return $this->belongsTo('App\Admin\Models\User');
}
public $timestamps = false;
}
Controller 列出地址
public function form_edit_address( $id_list, $id_address ){
$list = Lists::find( $id_list );
$address = ListsAddresses::find( $id_address );
return view( "admin.forms.form_edit_address" )
->with( 'list', $list )
->with( 'address', $address );
}
表单 View
<div class="col-md-6" style="padding-right: 0">
<div class="form-group">
<label for="order">Orden*</label>
<input type="order" class="form-control" id="order" name="order" value="{{ $address->order }}" required>
</div><!-- /.form-group -->
</div><!-- /.col -->
我的数据库表枢轴有下一个结构
id - title - order - list_id - address_id
如何在我的 View 中获取与数据透视表中的地址对应的订单值?
编辑
这是我创建新地址时保存订单的方式
if( $address->save() ){
$address_data = array();
$address_title = htmlspecialchars( $request->input( "state" ).' '.$request->input( "city" ).' '.$request->input( "street" ).' '.$request->input( "neighborhood" ).' '.$request->input( "cp" ) );
$address_order = $request->input( "order" );
$address_data[ $address->id ] = array( 'title' => $address_title, 'order' => $address_order );
$list->addresses()->attach( $address_data );
}
最佳答案
也许首先将您的关系函数更改为具有 withPivot('order')
public function lists()
{
return $this->belongsToMany('App\Admin\Models\Lists',
'list_has_addresses' , 'address_id', 'list_id')
->withPivot('order');
}
接下来,您将完全独立地获取 $list 和 $address,现在无法保证它们实际上彼此相关。如果您没有进行路由模型绑定(bind),那么也许您应该进行一些 ..OrFail() 检查以在未找到内容时以 404 中止:
public function form_edit_address( $id_list, $id_address )
{
$address = ListsAddresses::findOrFail( $id_address );
$list = $address->lists()->where('list_id', $id_list)->firstOrFail();
return view( "admin.forms.form_edit_address" )
->with( 'list', $list )
->with( 'address', $address );
}
我认为 $list 对象将是具有 pivot 属性的对象,因此在您看来您可能会说 $list->pivot->order
关于php - 从 View laravel 中的数据透视表获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44011757/