Wie kann ich die Seitennummerierung mit Doctrine_Pager oder sfDoctrinePager implementieren, während meine Abfrage mehrere Spalten aus zwei oder mehr Tabellen auswählt?Wie verwendet man Doktrin oder Symfony Pager mit unterschiedlicher Spalte aus mehreren Tabellen?
Edit1:
Ok, jetzt habe ich herausgefunden, dass es getan werden kann, wie Nathan unten beschrieben hat! Ich war verwirrt, da ich bestimmte Daten aus der Abfrage nicht abrufen konnte! Lassen Sie mich es unten beschreiben:
Das ist mein Pager Abfrage:
$pager = new sfDoctrinePager('sfGuardUser', '5');
$q = Doctrine_Query::create()
->select('u.id, u.username, p.org_name, g.name, l.status')
->from('sfGuardUser u')
->leftJoin('u.Profile p')
->leftJoin('u.Groups g')
->leftJoin('u.LicensedVendors l')
->where('g.name = \'client\'');
$pager->setQuery($q);
$pager->setPage($request->getParameter('page', 1));
$pager->init();
Jetzt in meiner Vorlage kann ich meine sfGuardUser und Profildaten wie folgt abrufen:
foreach ($pager->getResults() as $data) {
echo $data->username ; //outputs 'username' from sfGuardUser table
echo '<br />' ;
echo $data->Profile->org_name ; //outputs 'Organization name' from sfGuardUserProfile table
}
ich falsch versuchte rufen Sie die Profildaten von $data->org_name
und nicht $data->Profile->org_name
ab! Jetzt funktioniert es für dieses Teil richtig, aber es gibt noch ein Problem!
Ich bin nach wie vor nicht in der Lage die Gruppen & LicensedVendors Daten mit $data->Groups->name
oder $data->LicensedVendors->status
abzurufen! Es zeigt auch keinen Fehler oder irgendeinen Wert an! sieht so aus, als würde eine leere Zeichenfolge ausgegeben. Sollte es nicht den gleichen Wert wie Profildaten bekommen? Aber wenn ich die Abfrage hydrate
indem:
$q->setHydrationMode(Doctrine_Core::HYDRATE_SCALAR);
ich alle Daten durch abrufen können:
foreach ($pager->getResults() as $data) {
echo $data['u_username'];
echo $data['p_org_name'];
echo $data['g_name'];
echo $data['l_status'];
}
Wie diese Daten zu bekommen, ohne **Doctrine_Core::HYDRATE_SCALAR**
Einstellung? Wo ich falsch mache, um diese Gruppen und LicensedVendors Tabellendaten abzurufen? Hier
ist die Schema-Definition der oben beschriebenen Tabellen:
License:
actAs: [Timestampable]
tableName: licenses
columns:
id:
type: integer(4)
primary: true
notnull: true
autoincrement: true
status:
type: enum
values: ['approved','pending_admin','pending_client','pending_vendor','rejected']
default: 'pending'
client_id:
type: integer(8)
notnull: true
vendor_id:
type: integer(8)
notnull: true
product_desc:
type: clob(16777215)
supplier_name:
type: string(80)
other_desc:
type: string(50)
financial_statement:
type: clob
relations:
VendorUser:
class: sfGuardUser
local: client_id
foreign: id
foreignAlias: LicensedVendors
onDelete: cascade
foreignType: many
owningSide: true
ClientUser:
class: sfGuardUser
local: vendor_id
foreign: id
foreignAlias: LicensedClients
onDelete: cascade
foreignType: many
owningSide: true
sfGuardUser:
actAs: [Timestampable]
columns:
first_name: string(255)
last_name: string(255)
email_address:
type: string(255)
notnull: true
unique: true
username:
type: string(128)
notnull: true
unique: true
algorithm:
type: string(128)
default: sha1
notnull: true
salt: string(128)
password: string(128)
is_active:
type: boolean
default: 1
is_super_admin:
type: boolean
default: false
last_login:
type: timestamp
indexes:
is_active_idx:
fields: [is_active]
relations:
Groups:
class: sfGuardGroup
local: user_id
foreign: group_id
refClass: sfGuardUserGroup
foreignAlias: Users
sfGuardUserProfile:
actAs:
Timestampable: ~
columns:
user_id:
type: integer
notnull: true
email:
type: string(80)
notnull: true
unique: true
email_new:
type: string(80)
unique: true
firstname:
type: string(30)
lastname:
type: string(70)
org_name:
type: string(80)
notnull: true
relations:
User:
class: sfGuardUser
foreign: id
local: user_id
type: one
onDelete: cascade
foreignType: one
foreignAlias: Profile
sfGuardGroup:
actAs: [Timestampable]
columns:
name:
type: string(255)
unique: true
description: string(1000)
relations:
Users:
class: sfGuardUser
refClass: sfGuardUserGroup
local: group_id
foreign: user_id
foreignAlias: Groups
Edit2: ich meine neue Themen geschrieben, die ich in erster bearbeiten als eine separate Frage beschrieben here!
Danke Nathan für deine Antwort! Es sollte so funktionieren, wie du es oben angegeben hast; nachdem ich eine Weile versucht habe, habe ich das Problem herausgefunden. Ich muss die Daten tatsächlich auf andere Weise abrufen. Es gibt jedoch noch ein Problem, das ich ausführlich in meinen bearbeiteten Teil der Frage gestellt habe! Du kannst es dir anschauen :) – med
medhad, deine ursprüngliche Frage war klar und ich versuchte es klar zu beantworten. Mit deinen Änderungen ist es eine ganz andere Sache. Vielleicht solltest du eine neue Frage stellen. Ich frage mich, ob Sie die Joins wirklich benötigen, bevor Sie den Pager einrichten? Können Sie '$ license-> getVendorUser()' nicht ausführen, während Sie die Pager-Ergebnisse durchgehen? – Nathan
Nathan, du hast Recht, es als neue Frage zu veröffentlichen! Ich habe es nur in einem neuen Thread gefragt und von hier abgekratzt! Ich kann den Benutzer (Kreditor) durch * $ Lizenz-> getVendorsUser * true, aber in diesem Fall muss ich alle Benutzer, die in der Client-Gruppe sind und ihren entsprechenden Lizenzstatus mit dem aktuellen Anbieter abfragen! – med