簡體   English   中英

laravel 5上雄辯的ORM關系

[英]Eloquent ORM relationship on laravel 5

我在laravel 5上創建了消息系統,但我無法在恢復頁面上獲取發件人信息(例如名稱電子郵件......)

我有消息表:

public function up()
    {
        Schema::create('messages', function(Blueprint $table){
            $table->increments('id');
            $table->integer('destination_id')->unsigned();
            $table->integer('source_id')->unsigned();
            $table->string('sujet');
            $table->text('contenu');
            $table->boolean('vu')->default(0);
            $table->boolean('repondu')->default(0);
            $table->timestamps();
            $table->foreign('source_id')->references('id')->on('users')->onDelete('cascade');
            $table->foreign('destination_id')->references('id')->on('users')->onDelete('cascade');
        });
    }

在我創建的模型上添加:

消息模型:

class Message extends Model {

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

在用戶模型上我添加了這個功能:

public function message()
{
    return $this->hasMany('App\Message');
}

但是,當我嘗試獲取用戶消息並希望得到例如{{$ message-> user-> name}}時,我收到一條錯誤消息,我試圖獲取非對象的屬性

這是此頁面的控制器

當您使用時,默認用戶的關鍵字段: return $this->belongsTo('App\\User'); 如果表名是這樣的:本例中的table_name_id將類似於: user_id

我看到你需要與用戶表的關系:

$table->integer('destination_id')->unsigned();
$table->integer('source_id')->unsigned();

所以最好的解決方案是創建兩個方法,如:

class Message extends Model 
{
    public function source()
    {
        return $this->belongsTo('App\User', 'source_id');
    }

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

然后你可以打電話:

{{$message->source->name}}

{{$message->destination->name}}

你可以用其他方式命名這個方法,比如: sourceUser()

看來你沒有為消息模型設置外鍵。 如果一個用戶有很多消息,你應該添加這樣的外鍵

    public function up()
        {
            Schema::create('messages', function(Blueprint $table){
                $table->increments('id');
                $table->integer('user_id')->unsigned();
                $table->integer('destination_id')->unsigned();
                $table->integer('source_id')->unsigned();
                $table->string('sujet');
                $table->text('contenu');
                $table->boolean('vu')->default(0);
                $table->boolean('repondu')->default(0);
                $table->timestamps();
                $table->foreign('source_id')->references('id')->on('users')->onDelete('cascade');
                $table->foreign('destination_id')->references('id')->on('users')->onDelete('cascade');
            });
        }

暫無
暫無

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

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