Sequenzia/lib/Rails/ActiveRecord/Relation/Association.php

49 lines
1.3 KiB
PHP
Raw Normal View History

2013-10-02 18:14:53 +02:00
<?php
namespace Rails\ActiveRecord\Relation;
use Rails\ActiveRecord\ActiveRecord;
use Rails\ActiveRecord\Relation;
class Association extends AbstractRelation
{
protected
$query,
$params,
$parent_model;
public function __construct(array $params, $parent_model)
{
$this->params = $params;
$this->parent_model = $parent_model;
}
public function get_query()
{
return $this->query;
}
public function build_query()
{
$params = $this->params;
if (empty($params['foreign_key'])) {
2013-10-09 07:30:48 +02:00
$inflector = \Rails::services()->get('inflector');
2013-10-02 18:14:53 +02:00
$cn = get_class($this->parent_model);
2013-10-09 07:30:48 +02:00
$params['foreign_key'] = $inflector->singularize($cn::tableName()).'_id';
2013-10-02 18:14:53 +02:00
}
$query = new Relation($params['class_name'], $params['class_name']::tableName());
$query->where('`' . $params['foreign_key'] . "` = ?", $this->parent_model->id);
# params[0], if present, it's an anonymous function to customize the relation.
# The function is binded to the relation object.
if (isset($this->params[0])) {
$lambda = array_shift($this->params);
2013-10-12 12:37:13 +02:00
$lambda = $lambda->bindTo($query);
2013-10-02 18:14:53 +02:00
$lambda();
}
$this->query = $query;
}
}