Laravel Eloquent一对一的关系设置

时间:2014-03-16 17:55:53

标签: php laravel laravel-4

我在laravel应用程序中建立了一对一的关系,但是我收到错误"试图获取非对象的属性"当我尝试引用相关表时。

我的Contractor.php模型:

    class Contractor extends Eloquent  {

/**
 * The database table used by the model.
 *
 * @var string
 */
protected $table = 'contractor';

function profile() {
    return $this->hasOne('ContractorProfile');
}
}

我的ContractorProfile.php模型:

<?php

use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;

class ContractorProfile extends Eloquent  {

/**
 * The database table used by the model.
 *
 * @var string
 */
protected $table = 'contractor_profile';

 public function contractor() {
    return $this->belongsTo('Contractor');
 }
}

这是我的视图文件的片段

show.blade.php

<div>
 <h4>{{ $contractor->profile->tag_line }}</h4></p>
</div>

如果我只是打电话给$ contractor-&gt;个人资料页面加载,但没有回复任何内容。如果我添加 - &gt; tag_line,我会得到&#34;尝试获取非对象的属性&#34;错误。 tag_line是我的contractor_profile表中的列名。

您是否看到我正在制作的错误?

TIA

编辑:数据库信息:

Schema::create('contractor', function ($table) {

        $table->increments('id');
        $table->integer('hba_number')->nullable();
        $table->integer('msn')->nullable();
        $table->string('type')->default("");
        $table->string('name')->default("");
        $table->string('address_1')->default("");
        $table->string('address_2')->default("");
        $table->string('city')->default("");
        $table->string('state')->default("");
        $table->string('zip')->default("");
        $table->string('country')->default("");
        $table->string('phone')->default("");
        $table->string('website')->default("");
        $table->integer('company_id')->nullable();
        $table->integer('user_id');
        $table->timestamps();
        $table->softDeletes();
    });

Schema::create('contractor_profile', function ($table) {

        $table->increments('id');
        $table->integer('contractor_id');

        $table->string('tag_line')->default("");
        $table->string('story')->default("");
        $table->string('area_of_operation')->default("");
        $table->text('experience')->default("");
        $table->text('education')->default("");
        $table->text('insurance_verified')->default("");
        $table->timestamps();
        $table->softDeletes();
    });

1 个答案:

答案 0 :(得分:0)

问题可能是因为您为Contractor模型使用了非标准表名。尝试通过指定ContractorProfile的第二个参数来定义belongsTo模型中的关系:

return $this->belongsTo('Contractor', 'contractor_id');

您可能还需要在Contractor模型上执行相同的映射:

return $this->hasOne('ContractorProfile', 'contractor_id');