簡體   English   中英

Laravel BelongsTo 返回空對象

[英]Laravel BelongsTo returning empty object

我有一個名為消息和用戶的表。 users 是由 laravel auth 生成的默認用戶表。 出於某種原因,當我嘗試返回時,在我的控制器中的 postMessage 函數中

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

關系船返回一個空對象。 我知道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);
        }
    }

您正在調用關系方法,而不是它的值。

嘗試不使用()

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

此外,您應該考慮將lower_snake_case用於所有關系方法,並通過relationshio_name_id命名外鍵,這樣您就不需要手動定義外鍵名稱,Laravel 會自動猜測它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM