Laravel не работает с пользовательским атрибутом модели

То же самое работает для других моделей в приложении, но не эта & Я не могу понять, почему. Когда я пытаюсь получить доступ к атрибуту 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();
});

1

Решение

Вы должны определить этот метод доступа следующим образом:

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

И потом, во-вторых, в Blade вы должны использовать это так:

$domain->client_name

со случаем змеи.

Очевидно, что нет смысла создавать clients отношения тоже. Это должно быть скорее имя client,

1

Другие решения

Ты пытался ?

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

Вы получаете к нему неправильный путь. Имена атрибутов доступны в случае змеи. Итак, вы должны использовать:

$domain->client_name
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 вернет его имя и '' иначе

0

Я удалил свою таблицу и сделал новую миграцию, и теперь все работает странно, спасибо всем, кто пытался помочь

-2
По вопросам рекламы [email protected]