<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                <article><h1>Eloquent: 修改器</h1><ul><li><a href="#introduction">簡介</a></li><li><a href="#accessors-and-mutators">訪問器 &amp; 修改器</a><ul><li><a href="#defining-an-accessor">定義一個訪問器</a></li><li><a href="#defining-a-mutator">定義一個修改器</a></li></ul></li><li><a href="#date-mutators">日期轉換器</a></li><li><a href="#attribute-casting">屬性類型轉換</a><ul><li><a href="#array-and-json-casting">數組 &amp; JSON 轉換</a></li></ul></li></ul><p><a name="introduction"></a></p><h2><a href="#introduction">簡介</a></h2><p>訪問器和修改器可以讓你修改 Eloquent 模型中的屬性或者設置它們的值,例如,你可能想要使用 <a href="/docs/5.4/encryption">Laravel 加密器</a> 來加密一個被保存在數據庫中的值,當你從 Eloquent 模型訪問該屬性時該值將被自動解密。</p><p>除了自定義訪問器和修改器之外,Eloquent 也會自動將日期字段類型轉換成 <a href="https://github.com/briannesbitt/Carbon">Carbon</a> 實例或將 <a href="#attribute-casting">文本字段類型轉換成 JSON</a>。</p><p><a name="accessors-and-mutators"></a></p><h2><a href="#accessors-and-mutators">訪問器 &amp; 修改器</a></h2><p><a name="defining-an-accessor"></a></p><h3>定義一個訪問器</h3><p>若要定義一個訪問器,則須在你的模型上創建一個 <code class=" language-php">getFooAttribute</code> 方法。要訪問的 <code class=" language-php">Foo</code> 字段需使用「駝峰式」來命名。在這個例子中,我們將為 <code class=" language-php">first_name</code> 屬性定義一個訪問器。當 Eloquent 嘗試獲取 <code class=" language-php">first_name</code> 的值時,將會自動調用此訪問器:</p><pre class=" language-php"><code class=" language-php"><span class="token delimiter">&lt;?php</span> <span class="token keyword">namespace</span> <span class="token package">App</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Database<span class="token punctuation">\</span>Eloquent<span class="token punctuation">\</span>Model</span><span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">User</span> <span class="token keyword">extends</span> <span class="token class-name">Model</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true">/** * 獲取用戶的名字。 * * @param string $value * @return string */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">getFirstNameAttribute<span class="token punctuation">(</span></span><span class="token variable">$value</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">ucfirst<span class="token punctuation">(</span></span><span class="token variable">$value</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span></code></pre><p>如你所見,字段的原始值被傳遞到訪問器中,讓你可以編輯修改并返回結果。如果要訪問被修改的值,則可以像這樣來訪問 <code class=" language-php">first_name</code> 屬性:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$user</span> <span class="token operator">=</span> <span class="token scope">App<span class="token punctuation">\</span>User<span class="token punctuation">::</span></span><span class="token function">find<span class="token punctuation">(</span></span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$firstName</span> <span class="token operator">=</span> <span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">first_name</span><span class="token punctuation">;</span></code></pre><p><a name="defining-a-mutator"></a></p><h3>定義一個修改器</h3><p>若要定義一個修改器,則須在模型上定義一個 <code class=" language-php">setFooAttribute</code> 方法。要訪問的 <code class=" language-php">Foo</code> 字段需使用「駝峰式」來命名。讓我們再來定義 <code class=" language-php">first_name</code> 屬性的修改器。當我們嘗試在模型上設置 <code class=" language-php">first_name</code> 的值時,將會自動調用此修改器:</p><pre class=" language-php"><code class=" language-php"><span class="token delimiter">&lt;?php</span> <span class="token keyword">namespace</span> <span class="token package">App</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Database<span class="token punctuation">\</span>Eloquent<span class="token punctuation">\</span>Model</span><span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">User</span> <span class="token keyword">extends</span> <span class="token class-name">Model</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true">/** * 設定用戶的名字。 * * @param string $value * @return void */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">setFirstNameAttribute<span class="token punctuation">(</span></span><span class="token variable">$value</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token this">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">attributes</span><span class="token punctuation">[</span><span class="token string">'first_name'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">strtolower<span class="token punctuation">(</span></span><span class="token variable">$value</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span></code></pre><p>修改器會獲取屬性已經被設置的值,讓你可以操作該值并將其設置到 Eloquent 模型內部的 <code class=" language-php"><span class="token variable">$attributes</span></code> 屬性上。舉個例子,如果我們嘗試將 <code class=" language-php">first_name</code> 屬性設置成 <code class=" language-php">Sally</code>:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$user</span> <span class="token operator">=</span> <span class="token scope">App<span class="token punctuation">\</span>User<span class="token punctuation">::</span></span><span class="token function">find<span class="token punctuation">(</span></span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">first_name</span> <span class="token operator">=</span> <span class="token string">'Sally'</span><span class="token punctuation">;</span></code></pre><p>在這個例子中,<code class=" language-php">setFirstNameAttribute</code> 函數將會使用 <code class=" language-php">Sally</code> 作為參數來調用。修改器會對該名字使用 <code class=" language-php">strtolower</code> 函數并將其值設置于內部的 <code class=" language-php"><span class="token variable">$attributes</span></code> 數組。</p><p><a name="date-mutators"></a></p><h2><a href="#date-mutators">日期轉換器</a></h2><p>默認情況下,Eloquent 將會把 <code class=" language-php">created_at</code> 和 <code class=" language-php">updated_at</code> 字段轉換成 <a href="https://github.com/briannesbitt/Carbon">Carbon</a> 實例,它提供了各種各樣的方法,并繼承了 PHP 原生的 DateTime 類。</p><p>你可以在模型中自定義哪些字段需要被自動修改,或完全禁止修改,可通過重寫模型的 <code class=" language-php"><span class="token variable">$dates</span></code> 屬性來實現:</p><pre class=" language-php"><code class=" language-php"><span class="token delimiter">&lt;?php</span> <span class="token keyword">namespace</span> <span class="token package">App</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Database<span class="token punctuation">\</span>Eloquent<span class="token punctuation">\</span>Model</span><span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">User</span> <span class="token keyword">extends</span> <span class="token class-name">Model</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true">/** * 應被轉換為日期的屬性。 * * @var array */</span> <span class="token keyword">protected</span> <span class="token variable">$dates</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string">'created_at'</span><span class="token punctuation">,</span> <span class="token string">'updated_at'</span><span class="token punctuation">,</span> <span class="token string">'deleted_at'</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span></code></pre><p>當某個字段被認為是日期時,你或許想將其數值設置成一個 UNIX 時間戳、日期字符串(<code class=" language-php">Y<span class="token operator">-</span>m<span class="token operator">-</span>d</code>)、日期時間( <code class=" language-php">date<span class="token operator">-</span>time</code> )字符串,當然還有 <code class=" language-php">DateTime</code> 或 <code class=" language-php">Carbon</code> 實例,然后日期數值將會被自動保存到數據庫中:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$user</span> <span class="token operator">=</span> <span class="token scope">App<span class="token punctuation">\</span>User<span class="token punctuation">::</span></span><span class="token function">find<span class="token punctuation">(</span></span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">deleted_at</span> <span class="token operator">=</span> <span class="token scope">Carbon<span class="token punctuation">::</span></span><span class="token function">now<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">save<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>如上所述,在 <code class=" language-php"><span class="token variable">$dates</span></code> 屬性中列出的所有屬性被獲取到時,都將會自動轉換成 <a href="https://github.com/briannesbitt/Carbon">Carbon</a> 實例,讓你可在屬性上使用任何 <code class=" language-php">Carbon</code> 方法:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$user</span> <span class="token operator">=</span> <span class="token scope">App<span class="token punctuation">\</span>User<span class="token punctuation">::</span></span><span class="token function">find<span class="token punctuation">(</span></span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">deleted_at</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getTimestamp<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h4>時間格式</h4><p>默認情況下,時間戳將會以 <code class=" language-php"><span class="token string">'Y-m-d H:i:s'</span></code> 格式化。如果你想要自定義自己的時間戳格式,可在模型中設置 <code class=" language-php"><span class="token variable">$dateFormat</span></code> 屬性。該屬性定義了時間屬性應如何被保存到數據庫,以及模型應被序列化成一個數組或 JSON 格式:</p><pre class=" language-php"><code class=" language-php"><span class="token delimiter">&lt;?php</span> <span class="token keyword">namespace</span> <span class="token package">App</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Database<span class="token punctuation">\</span>Eloquent<span class="token punctuation">\</span>Model</span><span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">Flight</span> <span class="token keyword">extends</span> <span class="token class-name">Model</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true">/** * 模型的數據字段的保存格式。 * * @var string */</span> <span class="token keyword">protected</span> <span class="token variable">$dateFormat</span> <span class="token operator">=</span> <span class="token string">'U'</span><span class="token punctuation">;</span> <span class="token punctuation">}</span></code></pre><p><a name="attribute-casting"></a></p><h2><a href="#attribute-casting">屬性類型轉換</a></h2><p><code class=" language-php"><span class="token variable">$casts</span></code> 屬性在模型中提供了將屬性轉換為常見的數據類型的方法。<code class=" language-php"><span class="token variable">$casts</span></code> 屬性應是一個數組,且鍵是那些需要被轉換的屬性名稱,值則是代表字段要轉換的類型。支持的轉換的類型有:</p><ul><li>integer</li><li>real</li><li>float</li><li>double</li><li>string</li><li>boolean</li><li>object</li><li>array</li><li>collection</li><li>date</li><li>datetime</li><li>timestamp</li></ul><p>例如,<code class=" language-php">is_admin</code> 屬性以整數(<code class=" language-php"><span class="token number">0</span></code> 或 <code class=" language-php"><span class="token number">1</span></code>)被保存在我們的數據庫中,讓我們來把它轉換為布爾值:</p><pre class=" language-php"><code class=" language-php"><span class="token delimiter">&lt;?php</span> <span class="token keyword">namespace</span> <span class="token package">App</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Database<span class="token punctuation">\</span>Eloquent<span class="token punctuation">\</span>Model</span><span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">User</span> <span class="token keyword">extends</span> <span class="token class-name">Model</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true">/** * 應該被轉換成原生類型的屬性。 * * @var array */</span> <span class="token keyword">protected</span> <span class="token variable">$casts</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string">'is_admin'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token string">'boolean'</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span></code></pre><p>現在當你訪問 <code class=" language-php">is_admin</code> 屬性時,它將會被轉換成布爾值,即便保存在數據庫里的值是一個整數:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$user</span> <span class="token operator">=</span> <span class="token scope">App<span class="token punctuation">\</span>User<span class="token punctuation">::</span></span><span class="token function">find<span class="token punctuation">(</span></span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">is_admin</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true"> // </span><span class="token punctuation">}</span></code></pre><p><a name="array-and-json-casting"></a></p><h3>數組 &amp; JSON 轉換</h3><p>若原本字段保存的是被序列化的 JSON,則 <code class=" language-php"><span class="token keyword">array</span></code> 類型轉換將會特別有用。例如,在你的數據庫中有一個 <code class=" language-php"><span class="token constant">JSON</span></code> 或 <code class=" language-php"><span class="token constant">TEXT</span></code> 字段類型,其包含了 被序列化的 JSON,且對該屬性添加了 <code class=" language-php"><span class="token keyword">array</span></code> 類型轉換。當你在 Eloquent 模型上訪問該屬性時,它將會被自動反序列化成一個 PHP 數組:</p><pre class=" language-php"><code class=" language-php"><span class="token delimiter">&lt;?php</span> <span class="token keyword">namespace</span> <span class="token package">App</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Database<span class="token punctuation">\</span>Eloquent<span class="token punctuation">\</span>Model</span><span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">User</span> <span class="token keyword">extends</span> <span class="token class-name">Model</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true">/** * 應該被轉換成原生類型的屬性。 * * @var array */</span> <span class="token keyword">protected</span> <span class="token variable">$casts</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string">'options'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token string">'array'</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span></code></pre><p>一旦類型轉換被定義,則可以訪問 <code class=" language-php">options</code> 屬性,它將會自動把 JSON 反序列化成一個 PHP 數組。當你設置 <code class=" language-php">options</code> 屬性的值時,指定的數組將會被自動序列化成 JSON 以便進行保存:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$user</span> <span class="token operator">=</span> <span class="token scope">App<span class="token punctuation">\</span>User<span class="token punctuation">::</span></span><span class="token function">find<span class="token punctuation">(</span></span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$options</span> <span class="token operator">=</span> <span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">options</span><span class="token punctuation">;</span> <span class="token variable">$options</span><span class="token punctuation">[</span><span class="token string">'key'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string">'value'</span><span class="token punctuation">;</span> <span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">options</span> <span class="token operator">=</span> <span class="token variable">$options</span><span class="token punctuation">;</span> <span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">save<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h2>譯者署名</h2><table><thead><tr><th>用戶名</th><th>頭像</th><th>職能</th><th>簽名</th></tr></thead><tbody><tr><td><a href="https://laravel-china.org/users/79">@skyverd</a></td><td><img class="avatar-66 rm-style" src="https://dn-phphub.qbox.me/uploads/avatars/79_1427370664.jpeg?imageView2/1/w/100/h/100"></td><td>翻譯</td><td>全桟工程師,<a href="https://skyverd.com">時光博客</a></td></tr></tbody></table></article>
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看