如果你想創建這樣想泰勒Otwell和「核心」正試圖教人在Laravel做的事情,這是一個良好的開端:
你的文件可以組織爲
├── app
│ ├── Publishing
│ │ ├── Models
│ │ │ ├── Magazine
│ │ │ │ ├── Magazine.php
│ │ │ │ ├── Issue.php
│ │ │ │ ├── Article.php
│ │ ├── BaseModel.php
│ │ ├── Repositories
│ │ │ ├── MagazineRepository.php
配置一個PSR-0或PSR-4(更好)自動加載你的類:
"psr-0": {
"Publishing": "app/"
},
創建命名空間BaseModel:
<?php namespace Publishing\Models
use Eloquent;
class BaseModel extends Eloquent {
}
創建命名空間中的型號,可根據您的源代碼樹:
<?php namespace Publishing\Models\Magazine
use Publishing\Models\BaseModel;
class Magazine extends BaseModel {
protected $table = 'magazines';
}
<?php namespace Publishing\Models\Magazine
use Publishing\Models\BaseModel;
class Issue extends BaseModel {
protected $table = 'magazines_issues';
}
<?php namespace Publishing\Models\Magazine
use Publishing\Models\BaseModel;
class Article extends BaseModel {
protected $table = 'magazines_issues_articles';
}
您可能還需要創建一個MagazineRepository類,緩解訪問您的雜誌域:
<?php namespace Publishing\Repositories;
use Publishing\Models\Magazine\Magazine;
use Publishing\Models\Magazine\Issue;
use Publishing\Models\Magazine\Article;
class MagazineRepository implements DataRepositoryInterface {
private $state;
public function __construct(
Magazine $magazine,
Issue $issue,
Article $article
)
{
$this->magazine = $magazine;
$this->issue = $issue;
$this->article = $article;
}
public function getAll()
{
return $this->magazine->all();
}
public function findArticle($articleId)
{
return $this->article->find($articleId);
}
public function getByArticle($articleId)
{
return $this->findArticle($articleId)->magazine;
}
}
除了我在這裏對你的具體表格的官方建議,還有你可以做的其他事情。例如,可以在表格上放置前綴:查找「雜誌」,「問題」和「文章」 - 這將節省很多打字時間。無論哪種情況,如果您願意,可以爲模型使用子命名空間,但如果使用這些較短的表名,則更有意思。或者,保留表名,並在每個模型中指定一個'protected $ table ='whatever_table_name';'。你的選擇是無限的! – alexrussell
你對錶中的複數是完全正確的,這是我的一個錯字(因爲這些不是實際的表,它們只是一個例子)。 –
感謝您的評論,但刪除前綴並不是好事 - 取決於使用的內容,因爲可能還有其他內容的文章,例如'webpage_articles'或'online_articles',這是唯一的方法使表名稱自我解釋。 –