Laravel 获取自定义模型属性无效
Laravel get custom model attribute not working
完全相同的事情适用于应用程序中的其他模型,但不适用于这个,我不明白为什么。当我尝试访问 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');
}
}
Blade
<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>
编辑以添加 client/domain 架构
客户
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();
});
你试过了吗?
public function getClientNameAttribute() {
return Client::where('id', $this->client_id)->first()->name;
}
如果你的模特看起来像
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
关联的客户端将 return 他的名字,否则 ''
你应该像这样定义这个访问器:
public function getClientNameAttribute()
{
return ($client = $this->clients) ? $client->name : '';
}
然后第二件事是在 Blade 中你应该像这样使用它:
$domain->client_name
带蛇壳。
显然也没有必要建立 clients
关系。它的名称应该是 client
。
您访问的方式有误。以蛇形大小写访问属性名称。所以,你应该使用:
$domain->client_name
我删除了我的 table 并进行了新的迁移,现在一切正常,感谢所有试图提供帮助的人
添加新评论已经很晚了,但我一直希望有人能提供帮助。
我运行遇到了这个问题,我通过改变函数的签名解决了这个问题,从一个没有参数的函数变成了一个只有一个参数的函数,这个参数是要格式化的列的数据.
传递这个函数
public function getRejectedAttribute()
{
return $this->rejected ? true : false;
}
到这个其他函数
public function getRejectedAttribute($nRejected)
{
return $nRejected ? true : false;
}
完全相同的事情适用于应用程序中的其他模型,但不适用于这个,我不明白为什么。当我尝试访问 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');
}
}
Blade
<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>
编辑以添加 client/domain 架构
客户
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();
});
你试过了吗?
public function getClientNameAttribute() {
return Client::where('id', $this->client_id)->first()->name;
}
如果你的模特看起来像
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
关联的客户端将 return 他的名字,否则 ''
你应该像这样定义这个访问器:
public function getClientNameAttribute()
{
return ($client = $this->clients) ? $client->name : '';
}
然后第二件事是在 Blade 中你应该像这样使用它:
$domain->client_name
带蛇壳。
显然也没有必要建立 clients
关系。它的名称应该是 client
。
您访问的方式有误。以蛇形大小写访问属性名称。所以,你应该使用:
$domain->client_name
我删除了我的 table 并进行了新的迁移,现在一切正常,感谢所有试图提供帮助的人
添加新评论已经很晚了,但我一直希望有人能提供帮助。
我运行遇到了这个问题,我通过改变函数的签名解决了这个问题,从一个没有参数的函数变成了一个只有一个参数的函数,这个参数是要格式化的列的数据.
传递这个函数
public function getRejectedAttribute()
{
return $this->rejected ? true : false;
}
到这个其他函数
public function getRejectedAttribute($nRejected)
{
return $nRejected ? true : false;
}