Ist dies möglich, Tabellen in Lehre ORM zu verbinden, ohne Beziehungen mit?
Frage
Angenommen, es gibt zwei Tabellen.
Table X--
Columns:
id x_value
Table Y--
Columns:
id x_id y_value
Jetzt nicht, daß ich in Beziehung Lehre Klassen definieren wollen, und ich möchte einige Datensätze abzurufen, mit diesen beiden Tabellen eine Abfrage wie folgt aus:
Select x_value from x, y where y.id="variable_z" and x.id=y.x_id;
Ich bin, um herauszufinden, nicht in der Lage, wie Abfrage wie folgt in Lehre ORM schreiben
EDIT:
Tabellenstrukturen:
Tabelle 1:
CREATE TABLE IF NOT EXISTS `image` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`random_name` varchar(255) NOT NULL,
`user_id` int(11) NOT NULL,
`community_id` int(11) NOT NULL,
`published` varchar(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=259 ;
Tabelle 2:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`city` varchar(20) DEFAULT NULL,
`state` varchar(20) DEFAULT NULL,
`school` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;
Abfrage Ich bin mit:
$q = new Doctrine_RawSql();
$q ->select('{u.*}, {img.*}')
->from('users u LEFT JOIN image img ON u.id = img.user_id')
->addComponent('u', 'Users u')
->addComponent('img', 'u.Image img')
->where("img.community_id='$community_id' AND img.published='y' AND u.state='$state' AND u.city='$city
->orderBy('img.id DESC')
->limit($count+12)
->execute();
Fehler erhalte ich:
Fatal error: Uncaught exception 'Doctrine_Exception' with message 'Couldn't find class
u' in C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Table.php:290 Stack trace: #0
C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Table.php(240): Doctrine_Table- >initDefinition() #1 C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Connection.php(1127):
Doctrine_Table->__construct('u', Object(Doctrine_Connection_Mysql), true) #2
C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\RawSql.php(425): Doctrine_Connection-
>getTable('u') #3 C:\xampp\htdocs\fanyer\doctrine\models\Image.php(33): Doctrine_RawSql-
>addComponent('img', 'u.Image imga') #4 C:\xampp\htdocs\fanyer\community_images.php(31):
Image->get_community_images_gallery_filter(4, 0, 'AL', 'ALBERTVILLE') #5 {main} thrown in
C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Table.php on line 290
Lösung
Versuchen Sie etwas wie folgt aus: ---
$q = new Doctrine_RawSql();
$this->related_objects = $q->
select('{o.name}')->
from('tagset t1 JOIN tagset t2 ON t1.tag_id = t2.tag_id AND t1.object_id != t2.object_id JOIN object o ON t2.object_id = o.id')->
addComponent('o','Object o')->
where('t1.object_id = ?', $this->object->id)->
groupBy('t2.object_id')->
orderBy('COUNT(*) DESC')->
execute();
Andere Tipps
Sie können die SQL direkt dem db driver.You schreiben wird keine hydratisierter Arrays nicht zurückerhalten oder aber Objekte. Aber es kommt in praktisch manchmal:
$sql = "SELECT * FROM... ";
$pdo = Doctrine_Manager::connection()->getDbh();
$data = $pdo->query($sql)->fetchAll();
Sie können manuell Table Klasse in Symfony 1.4 ändern, aber dies sollte sorgfältig durchgeführt werden, da Sie keine Tabellen auf Datenbankebene verknüpft sind, die normalerweise passieren sollte.
class TableName extends BaseTableName
{
public function setUp()
{
$this->hasOne('LinkedTableName', array(
'local' => 'link_id',
'foreign' => 'link_id'));
parent::setUp();
}
}
Mögliche doppelte: Lehre ohne Beziehung verbinden