亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Tinker CLI 時,Laravel 如何查找并顯示 Eloquent 模型上的動態屬性?

使用 Tinker CLI 時,Laravel 如何查找并顯示 Eloquent 模型上的動態屬性?

PHP
大話西游666 2023-09-08 10:49:49
當我們使用artisan tinker, 并引用 Eloquent 模型對象時,REPL 會自動打印模型的屬性,就像它打印我們引用的任何標準對象的公共屬性一樣:>>> (object) ['hello' => 'world'] => {      +"hello": "world",    }>>> App\User::first() => App\User {      id: 1,      name: "...",   }對我來說不太明顯的是如何使這些虛擬屬性出現在這里,就好像它們已經被定義為類的公共屬性一樣。我知道模型的大部分屬性分配都是由該HasAttributes特征在內部處理的,但即使查看那里,我仍然不明白 Laravel 作者如何能夠實現這種行為。我嘗試過建立一個這樣的課程:class Bunch implements Arrayable, ArrayAccess, Jsonable, JsonSerializable { ... }但即使使用有效的數組訪問和toArray方法,當我直接從以下位置引用它時artisan tinker:>>> $b = new Bunch() => Bunch {}>>> $b->one = 1 => 1>>> $b['one'] => 1>>> $b => Bunch {}當 REPL 打印這樣的對象時,我們如何更改它使用的表示形式?
查看完整描述

2 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

決定如何在 Tinker 中顯示模型屬性的代碼位于 Tinker 代碼中,而不是模型中:

Casters 是Symfony VarDumper 組件的一部分,?PsySH使用該組件來顯示類。Tinker 是建立在 PsySH 之上的。

Tinker 將腳輪映射到其 Console 命令類中的類:

這將返回類到其施法者的映射:

/**

? ? ?* Get an array of Laravel tailored casters.

? ? ?*

? ? ?* @return array

? ? ?*/

? ? protected function getCasters()

? ? {

? ? ? ? $casters = [

? ? ? ? ? ? 'Illuminate\Support\Collection' => 'Laravel\Tinker\TinkerCaster::castCollection',

? ? ? ? ? ? 'Illuminate\Support\HtmlString' => 'Laravel\Tinker\TinkerCaster::castHtmlString',

? ? ? ? ? ? 'Illuminate\Support\Stringable' => 'Laravel\Tinker\TinkerCaster::castStringable',

? ? ? ? ];


? ? ? ? if (class_exists('Illuminate\Database\Eloquent\Model')) {

? ? ? ? ? ? $casters['Illuminate\Database\Eloquent\Model'] = 'Laravel\Tinker\TinkerCaster::castModel';

? ? ? ? }


? ? ? ? if (class_exists('Illuminate\Foundation\Application')) {

? ? ? ? ? ? $casters['Illuminate\Foundation\Application'] = 'Laravel\Tinker\TinkerCaster::castApplication';

? ? ? ? }


? ? ? ? return $casters;

? ? }

這將設置 VarDumper 上的腳輪:


? ? ? ? $config->getPresenter()->addCasters(

? ? ? ? ? ? $this->getCasters()

? ? ? ? );

如果要從模型中添加要在 Tinker 中顯示的其他屬性,可以在模型上使用 $ appends屬性:


<?php


namespace App\Models;


use Illuminate\Database\Eloquent\Model;


class User extends Model

{

? ? /**

? ? ?* The accessors to append to the model's array form.

? ? ?*

? ? ?* @var array

? ? ?*/

? ? protected $appends = ['is_admin'];

}


查看完整回答
反對 回復 2023-09-08
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

Eloquent 使用設置的數據庫連接自動填充模型屬性。



查看完整回答
反對 回復 2023-09-08
  • 2 回答
  • 0 關注
  • 119 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號