假設我做一個
$response = Http::get('http://example.com');
$i_want_to_be_a_model = $response->json();
我有一個\App\Models\Example
模型。
我怎樣才能$i_want_to_be_a_model
成為Example
模特?
我想這樣做,因為我想向statusText()
模型添加一個方法,這不是結果的一部分。
class Example extends Model {
// ..
public string $statusText;
public int $status;
public function statusText() {
switch ($this->status) {
case 100:
$this->statusText = "foo";
break;
//..
default:
$this->statusText = "bar";
}
}
}
如果這樣做有更優雅的方式,請告訴我。
uj5u.com熱心網友回復:
您可以定義一個helper
函式或工廠類來創建類的物件Example
。
例如:
<?php
namespace App\Factories;
use App\Models\Example;
use Illuminate\Support\Facades\Schema;
class ExampleFactory
{
public function __construct(array $attributes)
{
$example = new Example;
$fields = Schema::getColumnListing($example->getTable());
foreach($attributes as $field => $value) {
if(in_array($field, $fields) {
$example->{$field} = $value;
}
}
return $example;
}
public static function makeFromArray(array $attributes)
{
return new static(... $attributes);
}
}
然后您可以將工廠用作
// use App\Factories\ExampleFactory;
$response = Http::get('http://example.com');
$example = ExampleFactory::makeFromArray(json_decode($response->json(), true));
//Now you can do whatever you want with the instance, even persist in database
$example->save();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/485538.html