Как получить auth () -> user () в api controller Laravel - PullRequest
0 голосов
/ 31 января 2020

Я хочу получить зарегистрированный идентификатор пользователя и вставить его в таблицу Salesprice. Я пробовал приведенный ниже код, но он выдает эту ошибку

"SQLSTATE [HY000]: общая ошибка : 1364 Поле 'setby_id' не имеет значения по умолчанию (SQL: вставить в значения salesprices (book_id, salesprice, remarks, updated_at, created_at) (2, 5566, ?, 2020-01-31 03:59:58, 2020-01-31 03:59:58)) "

код в контроллере:

<?php

namespace App\Http\Controllers\API;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Salesprice;
use Illuminate\Support\Facades\Hash;
use App\User;
use Illuminate\Support\Facades\Auth;
public function store(Request $request) 
{
         try 
          {
              $user = auth('api')->user();

                 $this->validate($request,[
                    'book_id'=>'required', 
                    'salesprice'=>'required', 
                     ]);
                    $Salesprice= Salesprice::create([
                    'book_id'=>$request['book_id'], 
                    'salesprice'=>$request['salesprice'], 
                    // 'setdate'=>$request['setdate'],  
                    'setby'=> $user->id, 
                    'lastmodifiedby'=>$user->id, 
                    'remarks'=>$request['remarks']
                    ]);
                    return response()->json($Salesprice);

            }

          catch (Exception $e) 
          {
                        return response()->json($e->getMessage(), 500);
          }
}

код в миграции и модель

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Salesprice extends Model
{
    //
    use SoftDeletes;
    protected $fillable = [
        'book_id','salesprice','setby_id','modifiedby_id','remarks'
    ];
     public function Book()
    {
        return $this->hasOne('App\Book');
    }
     public function User()
    {
        return $this->hasOne('App\User');
    }
    protected $dates=['deleted_at'];
}


 public function up()
    {
        Schema::create('salesprices', function (Blueprint $table) {
            $table->bigIncrements('id');
             $table->bigInteger('book_id')->unsigned();
             $table->bigInteger('salesprice');
             $table->bigInteger('setby_id')->unsigned();
             $table->bigInteger('modifiedby_id')->unsigned();
              $table->string('remarks')->nullable();
              $table->softDeletes();
            $table->timestamps();
        });
    }

Ответы [ 4 ]

1 голос
/ 23 марта 2020

auth()->user() правильно. Единственное, что вам нужно сделать, это изменить

setby на setby_id, потому что вы делаете:

'setby'=> $user->id,

но ваш столбец называется setby_id, так что вам нужно:

'setby_id'=> $user->id,
1 голос
/ 31 января 2020

Нет ничего плохого в auth()->user().

Вы делаете:

'setby'=> $user->id,

, но ваш столбец называется setby_id, поэтому вам нужно:

'setby_id'=> $user->id,

У вас будет такая же проблема с lastmodifiedby против modifiedby_id.

1 голос
/ 31 января 2020

Поскольку это поле не может быть обнуляемым.

Поэтому при вставке значения без setby_id оно не будет выполнено.

Измените setby на setby_id

$Salesprice= Salesprice::create([
                    ... 
                    'setby_id'=> $user->id,  // change to setby_id
                    ...
                    ]);
0 голосов
/ 31 января 2020

используйте это

Auth::guard('api')->user()->id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...