Laravel - makeVisible не делает скрытый атрибут видимым - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть следующий код:

$model = new coretable;
    log::info($model->all());
    $model = $model->makeVisible('id_coretable');
    log::info($model->all());

В моем журнале просвета я получаю следующий результат:

[2020-02-26 10:14:19] local.INFO: [{"Internal_key":"TESTKEY_1"},{"Internal_key":"TESTKEY_2"},{"Internal_key":"TESTKEY_3"},{"Internal_key":"TESTKEY_4"},{"Internal_key":"TESTKEY_5"}]  
[2020-02-26 10:14:19] local.INFO: [{"Internal_key":"TESTKEY_1"},{"Internal_key":"TESTKEY_2"},{"Internal_key":"TESTKEY_3"},{"Internal_key":"TESTKEY_4"},{"Internal_key":"TESTKEY_5"}]

Я ожидаю, что атрибут "id_coretable" будет присутствовать в второй вывод от log::info(), но это не так. Это почему? Вот модель coretable:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class CoreTable extends Model
{

    /**
   * The table associated with the model.
   *
   * @var string
   */
   protected $table = 'coretable';


  /**
   * The attributes that are mass assignable.
   *
   * @var array
   */
  protected $fillable = [
    'Internal_key'
  ];

  protected $hidden = [
    'id_coretable',
    'created_at',
    'updated_at'
  ];

  protected $primaryKey = 'id_coretable';



  /**
   * Many-To-Many relationship with User-Model.
   */
  public function extensiontable_itc()
  {
    return $this->hasOne('App\extensiontable_itc', 'coretable_id');
  }

  public function extensiontable_sysops()
  {
    return $this->hasOne('App\extensiontable_sysops', 'coretable_id');
  }

  public function inaccessibletable()
  {
    return $this->hasOne('App\inaccessibletable', 'coretable_id');
  }
}

Я понятия не имею, почему makeVisible () не влияет на эффект.

1 Ответ

1 голос
/ 26 февраля 2020

Исходная модель, которую вы создали, не влияет на модели, полученные из функции all(). Это коллекция новых моделей с исходным массивом $hidden.

Чтобы изменить отображаемые значения, вам нужно вызвать makeVisible для полученной коллекции:

$model = new coretable;
log::info($model->all());
log::info($model->all()->makeVisible('id_coretable'));

Также рекомендуется вызывать функции запросов статически, таким образом вам не нужно создавать исходную модель:

log::info(coretable::all()->makeVisible('id_coretable'));
...