通常は同じ種類のデータを保持する基本的なページ モデルがありますが、レコードに追加情報を追加する必要がある場合があります。
Wordpress と同じように、カスタム フィールド / メタデータをレコードに追加する方法はありますか?
アドバイスをいただければ幸いです。
ありがとう
独自のメタデータ ソリューションを展開するのは難しすぎるとは思いません。簡単にするために、これを行うプラグインを次に示します。
https://github.com/kodeine/laravel-meta
ただし、配列では機能するとは思いませんが、Wordpress メタでは機能すると思いますか? 独自のシステムを作成する場合は、方法があると確信しています。
考えられる解決策の 1 つは、次のような composer パッケージを使用することです。
https://packagist.org/packages/navruzm/lmongo
そのパッケージは、こちらの Github ページでうまく説明されています。
これにより、Eloquent モデルの MongoDB ドライバーが可能になります。さらに、インターフェイス/クラスを使用して開発する場合(こことここRepository
でうまく説明されている懸念の分離手法)、前述のパッケージを使用すると、ページに MongoDB を使用できますが、アプリケーションの他のリソースには使用できません。
例:
app/src/ExampleAppName/Repository/Page
そのフォルダー内PageRepositoryInterface.php
に (おおまかに) 次のようなファイルを作成します。
<?php namespace ExampleAppName\Repository\Page;
interface PageRepositoryInterface {
public function all();
public function find($id);
public function create($input);
//... and so on
}
同じフォルダー内に、MongoPageRepository.php
(大まかに) 次のような別のファイルを作成します。
<?php namespace ExampleAppName\Repository\Page;
class MongoPageRepository implements PageRepositoryInterface {
protected $mongo;
public function __construct(LMongo $mongo)
{
$this->mongo = $mongo->connection();
}
//...Other code ...
public function create($input)
{
//Some kind of validation
$this->mongo->collection('pages')->insert($input);
}
//...Other code ...
}
App::bind('PageRepositoryInterface', 'MongoPageRepository');
どこか ( など) に電話するかapp/start/global.php
、 を調べる必要がありますServiceProviders
。
次に、次のように、関連するコントローラーから Mongo リポジトリーを使用できます。
<?php
class PageController extends \BaseController {
public function __construct(PageRepositoryInterface $pages)
{
$this->pages = $pages;
}
//...Other code...
public function store()
{
$input = Input::get();
$this->pages->create($input);
//Handle response, etc...
}
}
MongoDB は「スキーマレス」データベースであり、必要に応じて追加のメタデータを定義できます。
これは完全な回答ではないことに注意してください。「コピーして貼り付ける」ソリューションではなく、ガイドとして使用する必要があります。重要なこと (エラー処理、検証、不要なフィールドの削除など$input
) を省略しました。私が言及したリソースを参照するか、IRC の #laravel チャンネルに立ち寄ることをお勧めします。