【问题标题】:Get data from pivot table in view laravel从视图 laravel 中的数据透视表中获取数据
【发布时间】:2017-10-16 03:26:09
【问题描述】:

我对多对多关系数据有疑问,首先我将放置我的模型和控制器,我使用 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;
}

控制器列出地址

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 );

    }

表单视图

<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

如何在我的视图中获取与数据透视表中的地址对应的订单值?

编辑

这是我在创建新地址时保存订单的方式

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 );
     }

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    也许首先将您的关系函数更改为withPivot('order')

    public function lists()
    {
        return $this->belongsToMany('App\Admin\Models\Lists',
            'list_has_addresses' , 'address_id', 'list_id')
           ->withPivot('order');
    }
    

    接下来,您将完全分开获取 $list 和 $address,现在不能保证它们实际上是相互关联的。如果您没有进行 Route Model 绑定,那么也许您应该进行一些 ..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-&gt;pivot-&gt;order

    【讨论】:

    • 嗨,我已经尝试过了,但不起作用,获取非对象数据时出错,我在我的问题中添加了一些额外的代码,问候。
    猜你喜欢
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多