【问题标题】:Eloquent ORM relationship on laravel 5laravel 5上雄辩的ORM关系
【发布时间】:2016-08-27 03:15:32
【问题描述】:

我在 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}} 时,我收到一条错误消息,提示我尝试获取非对象的属性

这是该页面的控制器

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    使用时默认用户的关键字段: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()

    【讨论】:

      【解决方案2】:

      您似乎没有为消息模型设置外键。如果一个用户有很多消息,你应该像这样添加外键

          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');
                  });
              }
      

      【讨论】:

        猜你喜欢
        • 2014-06-22
        • 1970-01-01
        • 2018-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-26
        • 1970-01-01
        相关资源
        最近更新 更多