رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در خواندن اطلاعات از جدول ، به وسیله ی Relation ها
#1
من ارتباط ها رو بصورت صحیح دارم ولی زمانی که میخوام از طریق این ارتباط ها فیلدی رو فراخوانی کنم ارور 500 مشاهده میکنم ..

به عنوان مثال من این خط کد رو مینویسم :

foreach(Products::model()->findAll('status=1') as $product) {
echo $product->downloads->price;

و خطای 500 میده

ولی وقتی :

$product->downloads
رو توی print_r قرار میدم خروجی زیر رو میده :

Array
(
    [0] => Downloads Object
        (
            [_new:CActiveRecord:private] => 
            [_attributes:CActiveRecord:private] => Array
                (
                    [id] => 1
                    [product_id] => 1
                    [price] => 45000
                    [status] => 1
                    [size] => 3.2
                    [time] => 12:32:47
                )

            [_related:CActiveRecord:private] => Array
                (
                )

            [_c:CActiveRecord:private] => 
            [_pk:CActiveRecord:private] => 1
            [_alias:CActiveRecord:private] => t
            [_errors:CModel:private] => Array
                (
                )

            [_validators:CModel:private] => 
            [_scenario:CModel:private] => update
            [_e:CComponent:private] => 
            [_m:CComponent:private] => 
        )

)
1

Array
(
)
1

این هم قسمت ریلیشن ها موجود در مدل Products :
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'comments' => array(self::HAS_MANY, 'Comments', 'product_id'),
'customers' => array(self::HAS_MANY, 'Customers', 'product_id'),
'downloads' => array(self::HAS_MANY, 'Downloads', 'product_id'),
'orderproducts' => array(self::HAS_MANY, 'Orderproducts', 'product_id'),
);
}
! WORK HARD
پاسخ
تشکر شده توسط:
#2
شما در خط دو کدهاتون یه پرانتز اضافه دارین. پرانتزو برداین تا کدتون بصورت زیر باشه:
echo $product->downloads->price;
پاسخ
تشکر شده توسط:
#3
(08-04-1394، 11:55 ب.ظ)abdollah110110 نوشته: شما در خط دو کدهاتون یه پرانتز اضافه دارین. پرانتزو برداین تا کدتون بصورت زیر باشه:
echo $product->downloads->price;

نه مشکل از اون نیست .. اون مال print_r بوده ... یادم رفته برش دارم ..
مشکل از اون نیست ..
! WORK HARD
پاسخ
تشکر شده توسط:
#4
نوع ارتباط has many هستش و باید بصورت زیر price رو بدست بیاری.
<?php

foreach ($product->downloads as $download)
{
   echo $download->price . '<br>';
}
...
پاسخ
تشکر شده توسط:
#5
(10-04-1394، 12:59 ق.ظ)MRPM نوشته: نوع ارتباط has many هستش و باید بصورت زیر price رو بدست بیاری.
<?php

foreach ($product->downloads as $download)
{
   echo $download->price . '<br>';
}

محتویات $product چیه ؟
من مدل Products رو توش ریختم ...
قیمت هایی که در آورد از جدول Products بود .. در صورتی که من میخوام قیمت هایی رو در بیاره که توی جدول دانلود هستن و مربوط به محصول جاری از جدول Products هستن ..
! WORK HARD
پاسخ
تشکر شده توسط:
#6
خوب شما ساختار جداول رو نگذاشتین. دقت کنید که اگه ارتباطتون 1 به 1 هست، باید بجای HAS_MANY و BELONGS_TO توی هر دو مدل، از HAS_ONE استفاده کنید و برای استخراج اطلاعات قیمت هم به این شکل کار کنید:
$product = Products::model()->findByPk(5);
echo $product->download->price;

توی مثال بالا فرض کردم اسم ارتباط رو هم بجای downloads عبارت download انتخاب کردین چون توی طراحی خودتون گفته بودین ارتباطتون 1 به 1 هست.
پاسخ
تشکر شده توسط: Mohammad Salehi
#7
ممنون ...
تا اینجا مشکل فراخوانی حل شد ..
حالا چجوری میتونم براش محدودیت بگذارم که مثلا اونی که confirmed=1 هست رو نشون بده .. اونی که تائید شده هست..
چون الان شما از findByPk استفاده کردید نمیدونم چجوری محدودیت رو اعمال کنم ..
! WORK HARD
پاسخ
تشکر شده توسط:
#8
خوب از findAll یا findAllByAttributes استفاده کنید.
پاسخ
تشکر شده توسط: Mohammad Salehi
#9
برای findByPk هم میتونید محدودیت تعیین کنید، بصورت زیر:
Products::model()->findByPk($id, 'confirmed=:confirmed', array(':confirmed' => 1));
...
پاسخ
تشکر شده توسط: Mohammad Salehi




کاربران در حال بازدید این موضوع: 2 مهمان