【问题标题】:Laravel BelongsTo returning empty objectLaravel BelongsTo 返回空对象
【发布时间】:2020-07-04 11:25:32
【问题描述】:

我有一个名为 messages 和 users 的表。 users 是 laravel auth 生成的默认 users 表。出于某种原因,当我尝试返回时,在我的控制器中的 postMessage 函数中

return response()->json(['s' => $broadcastMessage, 'r' => $broadcastMessage->MessageOwner()]);

关系ship返回一个空对象。我知道MessageOwner 关系有效,因为我在不同的功能中使用它并且它工作正常,但我不知道为什么它不能在这里工作?我确定它存储了 user_id,它是正确的 id。

请注意,它确实会返回消息。

这里是向上迁移功能

Schema::create('messages', function (Blueprint $table) {
            $table->bigIncrements('id');

            $table->bigInteger('user_id')->unsigned()->index();
            $table->foreign('user_id')->references('id')->on('users');

            $table->longText('message');

            $table->timestamps();
        });

这是我的消息模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Message extends Model
{
    protected $table = 'messages';
    protected $fillable = [
        'user_id', 'message'
    ];

    public function user()
    {
        return $this->belongsTo(User::class, 'user_id', 'id');
    }

    public function MessageOwner()
    {
        return $this->belongsTo(User::class, 'user_id', 'id');
    }

    public function job()
    {
        return $this->belongsToMany(Job::class);
    }
}

这是我的控制器功能

public function postMessage(Request $request)
    {
        try {
            $message = Message::create([
                'user_id' => $request->input('user_id'),
                'message' => $request->input('message')
            ]);

            $job = Job::find($request->input('job_id'));
            $job->messages()->attach($message);

            $broadcastMessage = Message::find($message->id);

            return response()->json(['s' => $broadcastMessage, 'r' => $broadcastMessage->MessageOwner()]);

            event(new MessagePushed($broadcastMessage));

            return response()->json([
                'success' => true,
                'message' => 'success',
            ]);

        } catch (\Exception $exception) {
            return response()->json([
                'success' => false,
                'error' => true,
                'message' => $exception->getMessage()
            ], 500);
        }
    }

【问题讨论】:

    标签: php laravel eloquent laravel-5.8


    【解决方案1】:

    您调用的是关系方法,而不是它的值。

    尝试不使用()

    return response()->json(['s' => $broadcastMessage, 'r' => $broadcastMessage->MessageOwner]);
    

    另外你应该考虑为你所有的关系方法使用lower_snake_case,并将外键命名为relationshio_name_id,这样你就不需要手动定义外键名称,Laravel 会自动猜到。

    【讨论】:

    • 大声笑我不敢相信我做到了。谢谢
    猜你喜欢
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 2014-04-20
    • 2017-07-29
    • 2016-03-31
    • 1970-01-01
    相关资源
    最近更新 更多