【问题标题】:How to insert into pivot table after form submission using attach?使用附加提交表单后如何插入数据透视表?
【发布时间】:2019-03-25 21:57:25
【问题描述】:

我正在使用 Laravel eloquent,我正在尝试使用附加将表单中选定的用户 ID 和生成的工单 ID 插入到我的数据透视表中,但我不知道该怎么做。

存储功能

 public function store(Request $request
 {        
     $ticket = new Ticket;
     $ticket->organisation_name = $request['organisation_name'];
     $ticket->postal_address = $request['postal_address'];
     $ticket->physical_address = $request['physical_address'];
     $ticket->description_brief = $request['description'];
     $ticket->hours_dedicated = $request['hours'];
     $ticket->commencement_date = $request['start_date'];
     $ticket->due_date = $request['due_date'];
     $ticket->client_id = $request['client_id'];
     $ticket->save();

     //trying to use attach here

     return redirect('/home');
 }

表格

 <form action="TicketsController@store" method="POST">
        {{csrf_field() }}
        <div class="form-group">
            <label>Organisation Name:</label>
            <input type="text" class="form-control" name="organisation_name" placeholder="Enter Organisation Name">
        </div>
        <div class="form-group">
            <label>Postal address:</label>
            <input type="text" class="form-control" name="postal_address" placeholder="">
        </div>
        <div class="form-group">
            <label>Physical address:</label>
            <input type="text" class="form-control" name="physical_address" placeholder="">
        </div>
        <div class="form-group">
            <label>Client:</label>
            <select class="form-control" name="client_id">
                @foreach ($forms as $form)
                <option>{{$form->client->client_id}}</option>
                @endforeach
            </select>
        </div>
        <div class="form-group">
            <label>Description:</label>
            <input type="text" class="form-control" name="description" placeholder="">
        </div>
        <div class="form-group">
            <label>Hours:</label>
            <input type="text" class="form-control" name="hours" placeholder="">
        </div>
        <div class="form-group">
            <label>Start date:</label>
            <input type="text" class="form-control" name="start_date" type="date" placeholder="">
        </div>
        <div class="form-group">
            <label>Due date:</label>
            <input type="text" class="form-control" name="due_date" type="date" placeholder="">
        </div>
        <div class="form-group">
            <label>User:</label>
            <select class="form-control" name="id">
                @foreach ($users as $user)
                <option>{{$user->id}}</option>
                @endforeach
            </select>
        </div>
        <input type="submit" name="submit" class="btn btn-primary">

    </form>

用户.php

 class User extends Authenticatable
 {
 use Notifiable;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 'email', 'password',
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];
public function tickets(){
    return$this->belongsToMany(Ticket::class,'ticket_user','ticket_id','id');
}

Ticket.php

 class Ticket extends Model
 {

public function client(){
    return $this->belongsTo(Client::class,'client_id');
}
public function users(){
    return $this->belongsToMany(User::class,'ticket_user','id','ticket_id');
}

protected $primaryKey = 'ticket_id';
public $timestamps = false;

 }

【问题讨论】:

  • 我假设表单中的id(选择元素)将是您要添加到数据透视表中的user_id
  • 在尝试执行您所解释的操作时遇到什么错误?另外,那个 store 方法在哪个控制器中?
  • 是的,我想将此添加到我的数据透视表中。
  • 它在我的 TicketsController 中。我的主要问题是我真的不知道该怎么做。

标签: laravel eloquent


【解决方案1】:

根据documentation,您可以简单地传递您要附加的id。在$ticket-&gt;save(); 之后可以添加以下内容:

$ticket->users()->attach($request->input('id'));

attach() 也可以在您传递 id 数组、模型、id 集合或模型集合时工作。

【讨论】:

  • 这似乎对用户有用,但我仍然不确定如何从插入中附加新创建的票证 ID。
  • @Mr.t 你失去了我。您不想将其添加到ticket_user 表中吗?如果没有,您要添加到哪个数据透视表?
  • 抱歉误会您的权利。我已经尝试过了,但出现外键约束错误。
  • @Mr.t 我认为你在人际关系中的钥匙弄错了。在您的 Ticket 模型中,将 'id','ticket_id' 交换为 'ticket_id', 'id',而您的 User 模型则相反
  • 非常感谢,就是这样。它开始让我发疯了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
相关资源
最近更新 更多