小编Ham*_*ani的帖子

在Laravel中更新多行数据库

我想要一个代码来更新多行数据库,如下所示:

UPDATE values SET data='{"options":["male","female"],"default":"male"}' where project_id=1 and id=1;
UPDATE values SET data='{"options":["male","female"],"default":"male"}' where project_id=1 and id=2;
UPDATE values SET data='{"options":["male","female"],"default":"male"}' where project_id=1 and id=3;
Run Code Online (Sandbox Code Playgroud)

几个小时后,我可以在laravel框架中得到类似的结果:

$values = Value::where('project_id', $id)->get();
$sql = "";
foreach($request->fields as $field) {
  if(!empty($field->default)) { //New default value is set
    foreach($values as $value) {
      $data = json_decode($value->data, true); /**data column as json object in mysql database **/
      $data["default"] = $field->default;
      $data = json_encode($data);
      $sql .= "update ".DB::connection()->getDatabaseName().".values set data='".$data."' where id="."$value->id;";
    }
  }
}
DB::unprepared($sql);
Run Code Online (Sandbox Code Playgroud)

但这段代码不是一个好习惯!所以我的问题是 …

php orm laravel laravel-4

6
推荐指数
1
解决办法
1万
查看次数

Laravel 通过中间件授权

我使用以下两个操作在 laravel 5.3 中创建了一个策略:

class ProjectPolicy {
   ...
   public function index(User $user)
   {
      return true;
   }
   public function create(User $user)
   {
      return true;
   }
   ...
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试通过路由组中间件进行授权:

Route::group(['middleware' => ['can:index,create,App\Project']], function () {
    Route::resource('projects', 'ProjectController');
});
Run Code Online (Sandbox Code Playgroud)

当然我已经正确创建了项目模型和控制器,但是调用索引和创建操作总是返回 403 禁止响应。问题出在哪儿?

更新:

从路由中间件中删除操作之一,结果正确响应。像这样:

Route::group(['middleware' => ['can:index,App\Project']], function () {
    Route::resource('projects', 'ProjectController');
});
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-5

6
推荐指数
1
解决办法
4151
查看次数

标签 统计

laravel ×2

php ×2

laravel-4 ×1

laravel-5 ×1

orm ×1