كيف الوصول إلى جداول مختلفة في قاعدة البيانات دون إنشاء كيانات في سيمفوني

StackOverflow https://stackoverflow.com//questions/22030631

سؤال

لدي جدول مع 3 أعمدة إمبلوفينوم ، جوبتيتليكود والتكلفة.لقد جعلت كيان لذلك مع وظائف الخام الأساسية.

توظيف و جوبتيتليكود على حد سواء مفاتيح خارجية وعند عرض الكيان أريد أن أكون قادرا على الاستعلام عن جدول آخر في قاعدة البيانات لاستخراج اسم الموظف من جوبيستينوم و جوبيتيتل من جوبيتيتليكود.

في سيمفوني 1.4 أنا يمكن أن تفعل فقط العقائدي:: جيتابل ('الموظفين').العثور على ('توظيف') عن طريق تحديد' الموظفين ' في المخطط ولكن لم أتمكن من العثور على أي طريقة مماثلة في سيمفوني 2.4.

من ال أبي ل جيتدوكترين () لم أجد أي أساليب مماثلة يمكنني استخدامها وإذا كنت بناء استعلام على هذا النحو:

createQuery('SELECT a FROM hs_hr_employee a WHERE a.emp_number=1')

أحصل على الخطأ أدناه

[Semantical Error] line 0, col 14 near 'hs_hr_employee': Error: Class 'hs_hr_employee' is not defined

فكيف يمكنك الوصول إلى البيانات من الجداول الأخرى في ديسيبل?

هل كانت مفيدة؟

المحلول

تحاول العقيدة دائما تعيين نتائجك إلى الكيانات بشكل افتراضي.

يمكنك استخدام بيان معد دون الحاجة إلى تقديم نتيجة-رسم الخرائط:

احصل على الاتصال:

$connection = $em->getConnection();

إعداد بيان وتنفيذه:

$statement = $connection->prepare(
    'SELECT a FROM hs_hr_employee a WHERE a.emp_number = :emp'
);
$statement->bindValue('emp', $emp);
$statement->execute();

// for SELECT queries 
$result = $statement->fetchAll('EAGER');  // note: !== $connection->fetchAll()!

// for INSERT, UPDATE, DELETE queries
$affected_rows = $statement->rowCount();

هذا هو معبرة جدا.انظر الأمثلة أدناه للحصول على متغيرات أقصر.


البديل:

استخدام الاستعلام سكل الأصلي مع نتيجة-رسم الخرائط.

يوضح المثال المتقدم كيفية إعادة تسمية الأعمدة في مصفوفة النتائج.

// create a result-mapping
$rsm = new ResultSetMapping;
$rsm->addScalarResult('n', 'nickname');
$rsm->addScalarResult('f', 'muchachos');

$query = $em->createNativeQuery(
    '
     SELECT 
        users.name as n
        COUNT(user.friends) as f
     WHERE
        users.name = :username_parameter
     FROM
        user_table_name users
    ',
    $rsm
);
$query->setParameter('username_parameter', $username); 

$result = $query->getSingleResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY);

// example: $username = 'nifr'
// array => [ 
//   'nickname'  => 'nifr'
//   'muchachos' => 3919410
// ]

إصدارات أقصر: (السماح عقيدة إعداد بيان + جلب مباشرة نتيجة)

// for SELECT queries
$result = $connection->executeQuery(
    'SELECT a FROM hs_hr_employee a WHERE a.emp_number = ?'
    array($emp)
);

//for INSERT, UPDATE, DELETE queries
$affected_rows = $connection->executeUpdate(
    'DELETE FROM hs_hr_employee a WHERE a.emp_number = ?',
    array($emp)
);

// fetch all into array ( <numeric-index> => <associative-array-entry> )
$connection->fetchAll(
    'SELECT a FROM hs_hr_employee a WHERE a.emp_number = ?',
    array($emp)
);
// fetch only first-row of result-set as associative array
$connection->fetchAssoc(
   'SELECT a FROM hs_hr_employee a WHERE a.emp_number = ?',
    array($emp)
);
// fetch only first-row of result-set as array with numeric indexes
$connection->fetchArray(
    'SELECT a FROM hs_hr_employee a WHERE a.emp_number = ?',
    array($emp)
);

حتى المتغيرات الأقصر (ل من إدراج أو تحديث أو حذف الاستعلامات)

// DELETE FROM user WHERE id = ? (1)
$conn->delete('user', array('id' => 1));

// INSERT INTO user (username) VALUES (?) (nifr)
$conn->insert('user', array('username' => 'nifr'));

// UPDATE user (username) VALUES (?) WHERE id = ? (nifr, 1)
$conn->update('user', array('username' => 'nifr'), array('id' => 1));

روابط مفيدة:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top