2016-10-12 3 views
0

Я должен передать секрет author_id пользователя, когда он редактирует, например, статью, и запоминает это в базе данных в Backpack-Laravel. Как это можно сделать?Как добавить элемент запроса в Backpack-Laravel?

Я могу это сделать, значение появляется в файле $ (я использую dd ($ request), чтобы это знать), но не сохраняется в базе данных.

AuthorCrudController.php

public function update(UpdateArticleRequest $request) 
{ 
    //dd($request); <-- author_id = Auth::id() 
    return parent::updateCrud(); 
} 

UpdateArticleRequest.php

public function rules() 
{ 

    $this->request->add(['author_id'=> Auth::id()]); 
    return [ 
     'title' => 'required|min:5|max:255', 
     'author_id' => 'numeric' 
    ]; 
} 

ответ

3

99 раз из 100, когда значение не хранится, это потому, что столбец не было упомянуто в вашей модели $fillable. Это так?


Sidenote: Добавление AUTHOR_ID, как это работает, но если вы используете этот подход для нескольких моделей, я рекомендую кодирование это один раз для всех моделей. Для этого я использую черту. Таким образом, каждый раз, когда создается запись, автор сохраняется, и у вас есть все методы для его получения в одном месте, черта ($this->creator(), this->updator).

Мой подход к этому заключается в следующем:

1) У меня есть два новых столбцов в моей базе данных created_by и updated_by

2) Я использую черту так:

<?php namespace App\Models\Traits; 

use Illuminate\Database\Eloquent\Model; 

trait CreatedByTrait { 

    /** 
    * Stores the user id at each create & update. 
    */ 
    public function save(array $options = []) 
    { 

     if (\Auth::check()) 
     { 
      if (!isset($this->created_by) || $this->created_by=='') { 
       $this->created_by = \Auth::user()->id; 
      } 

      $this->updated_by = \Auth::user()->id; 
     } 

     parent::save(); 
    } 


    /* 
    |-------------------------------------------------------------------------- 
    | RELATIONS 
    |-------------------------------------------------------------------------- 
    */ 

    public function creator() 
    { 
     return $this->belongsTo('App\User', 'created_by'); 
    } 

    public function updator() 
    { 
     return $this->belongsTo('App\User', 'updated_by'); 
    } 
} 

3) Всякий раз, когда я хочу, чтобы модель имела эту функцию, мне просто нужно:

<?php 

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 
use Backpack\CRUD\CrudTrait; 

class Car extends Model 
{ 
    use CrudTrait; 
    use CreatedByTrait; // <---- add this line 

Надеюсь, что это поможет.

+0

Нет, к сожалению, присутствует свойство $ fillable, а также 'использование CrudTrait;' что я ранее забыл:/Не знаю, почему я не могу обновить или сохранить этот параметр. –

+0

Хм ... Тогда, может быть, попробуйте добавить его в метод AuthorCrudController :: update(), а не в FormRequest? – tabacitu

+0

Или вы можете использовать Рюкзак для этого и добавить по умолчанию скрытое поле с этим значением. – tabacitu

Смежные вопросы