Laravel-我需要帮助将 user_id 传递给 SQL 数据库中的 tasks_table 错误:调用未定义的方法 App\\User::id()

Posted

技术标签:

【中文标题】Laravel-我需要帮助将 user_id 传递给 SQL 数据库中的 tasks_table 错误:调用未定义的方法 App\\\\User::id()【英文标题】:Laravel- I need help passing user_id to tasks_table in SQL database Error: Call to undefined method App\\User::id()Laravel-我需要帮助将 user_id 传递给 SQL 数据库中的 tasks_table 错误:调用未定义的方法 App\\User::id() 【发布时间】:2019-04-04 04:16:41 【问题描述】:

我是一个学生,对所有这些 Laravel 东西还是个新手。我一直试图让我的任务在 store 方法中将 user_id 传递给我的 SQL 数据库。我已经尝试了大约 1000 种不同的方法,但都没有运气。

当前错误:调用未定义的方法 App\User::id()。我注意到其他帖子的错误中似乎没有 2 \ after App 。看不出它为什么这样做。

我已经发布了所有代码,以防有人从中获得任何帮助。任何帮助将不胜感激,如果您需要我提供更多帮助,请告诉我。

这是我的任务控制器

<?php

namespace App\Http\Controllers;

use App\Task;
use Illuminate\Http\Request;
use Auth;
use App\User;


class TaskController extends Controller

    public function __construct()
        $this->middleware('auth');
    
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Database\Eloquent\Collection|static[]
     */
    public function index()
    
        return response(Task::latest()->get(), 200);
    

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    
        $data = $request->validate([
            'text' => 'required',
            'finished' => 'required|boolean',
        ]);

        $user = Auth::user()->id();
        $task = Task::create($data, $user);

        return response($task, 201);
    

    /**
     * Display the specified resource.
     *
     * @param  \App\Task  $task
     * @return \Illuminate\Http\Response
     */
    public function show(Task $task)
    
        return response($task, 200);
    

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Task  $task
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Task $task)
    
        $data = $request->validate([
            'text' => 'required',
            'finished' => 'required|boolean',
        ]);

        $task->update($data);

        return response($task, 200);
    

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Task $task
     * @return \Illuminate\Http\Response
     * @throws \Exception
     */
    public function destroy(Task $task)
    
        $task->delete();

        return response('Deleted Succesfully', 200);
    

这是我的任务模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;


class Task extends Model

    protected $fillable = [
        'text',
        'finished',
        'user_id'

    ];

    protected $casts = [
        'finished' => 'boolean',
    ];

    public function tasks()
        return $this->hasMany(Task::class);
    

    public function user()
        return $this->belongsTo(User::class);
    


这是我的用户模型

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Task;

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 tasks()
        return $this->hasMany(Task::class);
    

任务表架构

public function up()

    Schema::create('tasks', function (Blueprint $table) 
        $table->increments('id');
        $table->integer('user_id');
        $table->longText('text');
        $table->boolean('finished')->default(false);
        $table->timestamps();
    );

用户表架构

    Schema::create('users', function (Blueprint $table) 
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        );
    

【问题讨论】:

也可以发布数据库表模式吗? 【参考方案1】:

只是稍微改变了你的代码:

任务模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Task extends Model

    protected $fillable = [
        'text',
        'finished',
        'user_id'
    ];

    protected $casts = [
        'finished' => 'boolean',
    ];

    public function user()
        return $this->belongsTo(User::class);
    


任务控制器

<?php

namespace App\Http\Controllers;


use Illuminate\Http\Request;
use App\Task;
use Auth;
use DB;

class TaskController extends Controller

    public function __construct()
        $this->middleware('auth');
    
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Database\Eloquent\Collection|static[]
     */
    public function index()
    
        return response(Task::latest()->get(), 200);
    

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    
        $request->validate([
            'text' => 'required',
            'finished' => 'required|boolean'
        ]);

        $task = Task::create([
            'text' => $request->text,
            'finished' => $request->finished,
            'user_id' => Auth::user()->id
        ]);

        return response($task, 201);
    

    /**
     * Display the specified resource.
     *
     * @param  \App\Task  $task
     * @return \Illuminate\Http\Response
     */
    public function show(Task $task)
    
        return response($task, 200);
    

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Task  $task
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Task $task)
    
        $request->validate([
            'text' => 'required',
            'finished' => 'required|boolean',
        ]);

        $task->update([
            'text' => $request->text,
            'finished' => $request->finished,
        ]);

        return response($task, 200);
    

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Task $task
     * @return \Illuminate\Http\Response
     * @throws \Exception
     */
    public function destroy(Task $task)
    
        $task->delete();

        return response('Deleted Successfully', 200);
    

【讨论】:

啊,是的,我已经尝试过了,仍然是同样的错误:(我将编辑上面的内容以反映这一点。 你在用户表上的主键是什么? 我相信这就是您要问的? $table->increments('id'); 你是救星!!非常感谢! 我没有注意到您只是根据验证规则返回数据创建数据:P。您所有的表单数据都在 $request 中。不客气:)

以上是关于Laravel-我需要帮助将 user_id 传递给 SQL 数据库中的 tasks_table 错误:调用未定义的方法 App\\User::id()的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 的配置文件工厂中提供唯一的 user_id

如何通过重定向将数据传递到laravel中的视图

我们可以将模型传递给雄辩的Laravel的updateOrCreate方法吗?

在 Laravel 中构建查询表达式时需要帮助

将变量传递给Laravel {{route}}帮助器

Laravel 编辑策略