如何在控制器中排队逻辑

时间:2019-03-19 04:35:58

标签: laravel

我在laravel项目的控制器中使用了两种逻辑

public function multiStore()
{
 $user = User::create([
      'name'=>$request->name,
      'email'=>$request->email,
      'password'=>Hash::make($request->name),
 ]);
 $post = MyPost::create([
     'name'=>$request->post_name,
     'body'=>$request->post_body,
 ]);
 return redirect()->to('/admin/home);
}

是否可以让用户创建成功,这样我才能使用由用户关系创建的帖子

我尝试了诸如if条件之类的东西,但是它不起作用

2 个答案:

答案 0 :(得分:1)

您可以尝试下面的代码,我假设自从您提到关系船以来,您就在posts表中有一个user_id字段。这不是最好的方法,但是我尝试使事情保持简单,所以我只编辑了代码。

注意:在使用protected $fillable

之前,请确保列出了模型中Create()中的所有表字段。
public function multiStore()
    {
     $user = User::create([
          'name'=>$request->name,
          'email'=>$request->email,
          'password'=>Hash::make($request->name),
     ]);

    if($user){
     $post = MyPost::create([
         'user_id' => $user->id
         'name'=>$request->post_name,
         'body'=>$request->post_body,
     ]);
    }
     return redirect()->to('/admin/home);
    }

答案 1 :(得分:1)

将查询包含在数据库事务中

  

https://laravel.com/docs/5.8/database#database-transactions

您可以:

DB::transaction(function() {
     Model::create();
     AnotherModel::create();
});

或者您可以使用以下内容查找并捕获错误...

DB::beginTransaction();

// Your queries here...
// Model::create();
// AnotherModel::create();

DB::commit();