172 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php namespace Illuminate\Database\Eloquent\Relations;
 | |
| 
 | |
| use Illuminate\Database\Eloquent\Model;
 | |
| use Illuminate\Database\Eloquent\Builder;
 | |
| 
 | |
| class Pivot extends Model {
 | |
| 
 | |
| 	/**
 | |
| 	 * The parent model of the relationship.
 | |
| 	 *
 | |
| 	 * @var \Illuminate\Database\Eloquent\Model
 | |
| 	 */
 | |
| 	protected $parent;
 | |
| 
 | |
| 	/**
 | |
| 	 * The name of the foreign key column.
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $foreignKey;
 | |
| 
 | |
| 	/**
 | |
| 	 * The name of the "other key" column.
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $otherKey;
 | |
| 
 | |
| 	/**
 | |
| 	 * The attributes that aren't mass assignable.
 | |
| 	 *
 | |
| 	 * @var array
 | |
| 	 */
 | |
| 	protected $guarded = array();
 | |
| 
 | |
| 	/**
 | |
| 	 * Create a new pivot model instance.
 | |
| 	 *
 | |
| 	 * @param  \Illuminate\Database\Eloquent\Model  $parent
 | |
| 	 * @param  array   $attributes
 | |
| 	 * @param  string  $table
 | |
| 	 * @param  bool    $exists
 | |
| 	 * @return void
 | |
| 	 */
 | |
| 	public function __construct(Model $parent, $attributes, $table, $exists = false)
 | |
| 	{
 | |
| 		parent::__construct();
 | |
| 
 | |
| 		// The pivot model is a "dynamic" model since we will set the tables dynamically
 | |
| 		// for the instance. This allows it work for any intermediate tables for the
 | |
| 		// many to many relationship that are defined by this developer's classes.
 | |
| 		$this->setRawAttributes($attributes, true);
 | |
| 
 | |
| 		$this->setTable($table);
 | |
| 
 | |
| 		$this->setConnection($parent->getConnectionName());
 | |
| 
 | |
| 		// We store off the parent instance so we will access the timestamp column names
 | |
| 		// for the model, since the pivot model timestamps aren't easily configurable
 | |
| 		// from the developer's point of view. We can use the parents to get these.
 | |
| 		$this->parent = $parent;
 | |
| 
 | |
| 		$this->exists = $exists;
 | |
| 
 | |
| 		$this->timestamps = $this->hasTimestampAttributes();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set the keys for a save update query.
 | |
| 	 *
 | |
| 	 * @param  \Illuminate\Database\Eloquent\Builder
 | |
| 	 * @return \Illuminate\Database\Eloquent\Builder
 | |
| 	 */
 | |
| 	protected function setKeysForSaveQuery(Builder $query)
 | |
| 	{
 | |
| 		$query->where($this->foreignKey, $this->getAttribute($this->foreignKey));
 | |
| 
 | |
| 		return $query->where($this->otherKey, $this->getAttribute($this->otherKey));
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Delete the pivot model record from the database.
 | |
| 	 *
 | |
| 	 * @return int
 | |
| 	 */
 | |
| 	public function delete()
 | |
| 	{
 | |
| 		return $this->getDeleteQuery()->delete();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get the query builder for a delete operation on the pivot.
 | |
| 	 *
 | |
| 	 * @return \Illuminate\Database\Eloquent\Builder
 | |
| 	 */
 | |
| 	protected function getDeleteQuery()
 | |
| 	{
 | |
| 		$foreign = $this->getAttribute($this->foreignKey);
 | |
| 
 | |
| 		$query = $this->newQuery()->where($this->foreignKey, $foreign);
 | |
| 
 | |
| 		return $query->where($this->otherKey, $this->getAttribute($this->otherKey));
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get the foreign key column name.
 | |
| 	 *
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	public function getForeignKey()
 | |
| 	{
 | |
| 		return $this->foreignKey;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get the "other key" column name.
 | |
| 	 *
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	public function getOtherKey()
 | |
| 	{
 | |
| 		return $this->otherKey;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set the key names for the pivot model instance.
 | |
| 	 *
 | |
| 	 * @param  string  $foreignKey
 | |
| 	 * @param  string  $otherKey
 | |
| 	 * @return $this
 | |
| 	 */
 | |
| 	public function setPivotKeys($foreignKey, $otherKey)
 | |
| 	{
 | |
| 		$this->foreignKey = $foreignKey;
 | |
| 
 | |
| 		$this->otherKey = $otherKey;
 | |
| 
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Determine if the pivot model has timestamp attributes.
 | |
| 	 *
 | |
| 	 * @return bool
 | |
| 	 */
 | |
| 	public function hasTimestampAttributes()
 | |
| 	{
 | |
| 		return array_key_exists($this->getCreatedAtColumn(), $this->attributes);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get the name of the "created at" column.
 | |
| 	 *
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	public function getCreatedAtColumn()
 | |
| 	{
 | |
| 		return $this->parent->getCreatedAtColumn();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get the name of the "updated at" column.
 | |
| 	 *
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	public function getUpdatedAtColumn()
 | |
| 	{
 | |
| 		return $this->parent->getUpdatedAtColumn();
 | |
| 	}
 | |
| 
 | |
| }
 |