src/Model/Taxonomy.php
<?php
namespace Corcel\Model;
use Corcel\Model;
use Corcel\Model\Builder\TaxonomyBuilder;
use Corcel\Model\Meta\TermMeta;
/**
* Class Taxonomy
*
* @package Corcel\Model
* @author Junior Grossi <juniorgro@gmail.com>
*/
class Taxonomy extends Model
{
/**
* @var string
*/
protected $table = 'term_taxonomy';
/**
* @var string
*/
protected $primaryKey = 'term_taxonomy_id';
/**
* @var array
*/
protected $with = ['term'];
/**
* @var bool
*/
public $timestamps = false;
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function meta()
{
return $this->hasMany(TermMeta::class, 'term_id');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function term()
{
return $this->belongsTo(Term::class, 'term_id');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function parent()
{
return $this->belongsTo(Taxonomy::class, 'parent');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function posts()
{
return $this->belongsToMany(
Post::class,
'term_relationships',
'term_taxonomy_id',
'object_id'
);
}
/**
* @param \Illuminate\Database\Query\Builder $query
* @return TaxonomyBuilder
*/
public function newEloquentBuilder($query)
{
return new TaxonomyBuilder($query);
}
/**
* @return TaxonomyBuilder
*/
public function newQuery()
{
return isset($this->taxonomy) && $this->taxonomy ?
parent::newQuery()->where('taxonomy', $this->taxonomy) :
parent::newQuery();
}
/**
* Magic method to return the meta data like the post original fields.
*
* @param string $key
* @return string
*/
public function __get($key)
{
if (!isset($this->$key)) {
if (isset($this->term->$key)) {
return $this->term->$key;
}
}
return parent::__get($key);
}
}