Метод make
Метод make применяется к модели Eloquent и возвращает новый экземпляр модели с заполненными атрибутами. Первым параметром передаётся массив атрибутов для заполнения модели. В отличие от метода create, метод make не сохраняет модель в базе данных, а только создаёт её экземпляр. Это полезно, когда нужно подготовить данные перед сохранением или создать объект для отображения в представлении.
Синтаксис
<?php
Model::make($attributes);
?>
Пример
Давайте создадим новый экземпляр модели Article без сохранения в базе данных:
<?php
use AppModelsArticle;
$article = Article::make([
'title' => 'article 1',
'content' => 'Content of article 1',
'status' => 'draft'
]);
echo $article->title;
echo $article->status;
?>
Результат выполнения кода:
"article 1"
"draft"
Пример
Созданный методом make экземпляр можно дополнить перед сохранением:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
use IlluminateSupportFacadesAuth;
class ArticleController extends Controller
{
public function store()
{
$article = Article::make([
'title' => 'article 1',
'content' => 'Content of article 1'
]);
$article->user_id = Auth::id();
$article->status = 'published';
$article->save();
return redirect()->route('articles.index');
}
}
?>
Пример
Метод make часто используется для создания связанных моделей через отношения:
<?php
namespace AppHttpControllers;
use AppModelsUser;
use AppModelsArticle;
class ArticleController extends Controller
{
public function createForUser($userId)
{
$user = User::find($userId);
$article = $user->articles()->make([
'title' => 'article 1',
'content' => 'Content of article 1'
]);
return view('articles.edit', ['article' => $article]);
}
}
?>
Пример
Метод make позволяет создавать несколько экземпляров через коллекции:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
class ArticleController extends Controller
{
public function prepareDrafts()
{
$articles = collect([
['title' => 'article 1', 'content' => 'Content 1'],
['title' => 'article 2', 'content' => 'Content 2'],
['title' => 'article 3', 'content' => 'Content 3']
])->map(function ($data) {
return Article::make($data);
});
foreach ($articles as $article) {
echo $article->title;
}
}
}
?>
Результат выполнения кода:
"article 1"
"article 2"
"article 3"