If you want to create thinks like Taylor Otwell and 'the core' is trying to teach people do things in Laravel, this is a good start:
Your files could be organized as
├── app
│ ├── Publishing
│ │ ├── Models
│ │ │ ├── Magazine
│ │ │ │ ├── Magazine.php
│ │ │ │ ├── Issue.php
│ │ │ │ ├── Article.php
│ │ ├── BaseModel.php
│ │ ├── Repositories
│ │ │ ├── MagazineRepository.php
Configure a PSR-0 or PSR-4 (better) to autoload your classes:
"psr-0": {
"Publishing": "app/"
},
Create your namespaced BaseModel:
<?php namespace Publishing\Models
use Eloquent;
class BaseModel extends Eloquent {
}
Create namespaced models, according to your source tree:
<?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';
}
You also may want to create a MagazineRepository class, to ease the access to your Magazine Domain:
<?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;
}
}