PHP code example of brandonkerr / eloquent-from-settings
1. Go to this page and download the library: Download brandonkerr/eloquent-from-settings library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
brandonkerr / eloquent-from-settings example snippets
namespace App\Models;
// ...
use Illuminate\Database\Eloquent\Factories\HasFactory;
class User extends Authenticatable
{
use HasFactory;
// ...
}
namespace Database\Factories;
// ...
use Brandonkerr\EloquentFromSettings\Traits\FromSettings;
class UserFactory extends Factory
{
use FromSettings;
// ...
}
class FooFactory extends Factory
{
use FromSettings;
public bool $throwsMissingTraitException = false;
// ...
}
class BarFactory extends Factory implements FromSettingsInterface
{
use FromSettings;
public function getThrowsMissingTraitException(): bool
{
return $this->someCustomSettingOrLogic;
}
// ...
}
class FooFactory extends Factory
{
use FromSettings;
public bool $throwsUnknownKeyException = false;
// ...
}
class BarFactory extends Factory implements FromSettingsInterface
{
use FromSettings;
public function getThrowsUnknownKeyException(): bool
{
return $this->someCustomSettingOrLogic;
}
// ...
}
$json = '{
"name":"Brandon Kerr",
"books":[
{
"title":"How to Use Eloquent From Settings",
"reviews":[
{
"reviewer":"Jane Doe",
"score":80
},
{
"reviewer":"John Smith",
"score":45
}
]
}
]
}';
Author::factory()->fromSettingsJson($json)->create();
/**
* Custom function to find or create the author, based on the given name
*
* @param string $name
* @return $this
*/
public function forAuthor(string $name): self
{
$author = Author::firstOrCreate([
"name" => $name
]);
return $this->state(["author_id" => $author->id]);
}
/**
* Custom function to add reviews with a perfect score
*
* @param string ...$names
* @return $this
*/
public function perfectReviews(string ...$names): self
{
return $this->has(
Review::factory()
->count(count($names))
->sequence(fn (Sequence $sequence) => [
"reviewer" => $names[$sequence->index],
"score" => 100,
])
);
}
$data = [
// the author's name attribute
"name" => "Bob",
// the author's HasMany relationship with Book
"books" => [
// first book
[
// the book's title attribute
"title" => "Bob's First Book",
// the book's HasMany relationship with Review
"reviews" => [
// first review
[
// the review's reviewer attribute
"reviewer" => "Jane Doe",
// the review's score attribute
"score" => 80,
],
// second review
[
// the review's reviewer attribute
"reviewer" => "John Smith",
// the review's score attribute
"score" => 45,
],
],
],
// second book
[
// the book's title attribute
"title" => "Please Don't Review Me",
// NOTE no reviews
],
],
];