Laravel获取自定义模型属性不起作用

时间:2016-06-02 15:11:50

标签: php laravel eloquent accessor

完全相同的是适用于应用程序中的其他模型,但不是这个和&我无法弄清楚为什么。当我尝试访问clientname属性时,它是空白的。

模型

class Domain extends Model {

protected $guarded = [];

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

public function getClientNameAttribute() {
    return Client::where('id', $this->client_id)->value('name');
}

}

刀片

  <tbody>
            @foreach( $domains as $domain )
            {!! Form::open(array('class' => 'form-inline', 'method' => 'DELETE', 'route' => array('domains.index', $domain->id))) !!}
            <tr>
                <td><a href="{{ route('domains.show', $domain->id) }}">{{ $domain->id }}</a></td>
                <td>{{ $domain->name }}</td>
                <td>{{ $domain->clientname }}</td>
                <td>{{ $domain->expiry_date }}</td>
                <td>  {!! link_to_route('domains.edit', 'Edit', array($domain->id), array('class' => 'btn btn-info')) !!}
                    </td>
            </tr>
            {!! Form::close() !!}

            @endforeach
        </tbody>

已编辑以添加客户端/域架构

客户端

    Schema::create('clients', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('kashflow_id')->unique();
        $table->string('name');
        $table->string('contact');
        $table->string('telephone');
        $table->string('mobile');
        $table->string('fax');
        $table->string('email');
        $table->string('address1');
        $table->string('address2');
        $table->string('address3');
        $table->string('address4');
        $table->string('postcode');
        $table->timestamps();
    });

            Schema::create('domains', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('client_id')->unsigned();
        $table->foreign('client_id')->references('id')->on('clients');
        $table->string('name');
        $table->date('expiry_date');
        $table->timestamps();
    });

6 个答案:

答案 0 :(得分:1)

你应该像这样定义这个访问者:

public function getClientNameAttribute() 
{
    return ($client = $this->clients) ? $client->name : '';
}

然后第二件事就是在Blade中你应该这样使用它:

$domain->client_name

有蛇案。

显然,创建clients关系也没有意义。它应该更名为client

答案 1 :(得分:0)

你试过吗?

public function getClientNameAttribute() {
    return Client::where('id', $this->client_id)->first()->name;
}

答案 2 :(得分:0)

如果您的模型看起来像

class Domain extends Model {


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

    public function getClientNameAttribute()
    {
        $client = $this->client;
        return $client ? $client->name : '';
    }

}

以下代码必须正常运行(没有错误)

<tbody>
    @foreach( $domains as $domain )
    {!! Form::open(array('class' => 'form-inline', 'method' => 'DELETE', 'route' => array('domains.index', $domain->id))) !!}
    <tr>
        <td><a href="{{ route('domains.show', $domain->id) }}">{{ $domain->id }}</a></td>
        <td>{{ $domain->name }}</td>
        <td>{{ $domain->client_name }}</td>
        <td>{{ $domain->expiry_date }}</td>
        <td>  {!! link_to_route('domains.edit', 'Edit', array($domain->id), array('class' => 'btn btn-info')) !!}
            </td>
    </tr>
    {!! Form::close() !!}

    @endforeach
</tbody>

如果与域$domain->client_name相关联的任何客户端将返回其名称,则''将返回

答案 3 :(得分:0)

您正以错误的方式访问它。以蛇形式访问属性名称。所以,你应该使用:

$domain->client_name

答案 4 :(得分:0)

添加新评论为时已晚,但我总是希望有人能提供帮助。

我遇到了这个问题,我通过改变函数的签名来解决它,从一个没有参数的函数变成一个只有一个参数的函数,这个参数是要格式化的列的数据。

传递这个函数

public function getRejectedAttribute()
{
    return $this->rejected ? true : false;
}

到这个其他功能

public function getRejectedAttribute($nRejected)
{
    return $nRejected ? true : false;
}

答案 5 :(得分:-3)

我删除了我的桌子并进行了新的迁移,所有内容现在都很奇怪,感谢所有试图提供帮助的人