زمان جاری: 2012/05/20, 08:14 AM خوش آمدید مهمان گرامی! (ورودعضویت)



انتخاب 2 تیبل


ارسال موضوع  ارسال پاسخ 
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رتبه موضوع:
 
انتخاب 2 تیبل
نویسنده پیام
tanha آفلاین
عضو جدید
*

ارسال‌ها: 9
تاریخ عضویت: Oct 2010
رتبه: 0
تشکر: 0
0 بار تشکر شده در 0 پست
ارسال: #1
انتخاب 2 تیبل
سلام دوستان عزیز بعد از کلی سرچ با سایت شما آشنا شدم

بنده توی کیک به یک مشکلی بر خوردم تونم اینه که

2 تیبل در نظر بگیرین {کاربران و گروه ها}

توی تیبل کاربران فقط اسم گروه ثبت شده که مشخص میکنه کاربر ماله کدوم گروه هست و توی گروه هم یکسری اطلاعات و تنظیمات هست که یک تاریخ انقضا هم هست

بنده میخوام وقتی تیبل کاربران را paginate میکنم تاریخ انقضا که توی تیبل گروه هست با توجه به اینکه اینجا فقط اسم گروه رو دارم (بر اساس آی دی بنا به دلایلی نمیشد بزاری) ، میخوام تاریخ انقضا هر کاربر رو از گروهش بکشم بیرون و همراه اطلاعاتش نشون بدم ، البته فکر کنم forginkey یه همچین چیزی باشه اما درست نمیدونم آیا راه حلی داره مشکل بنده ؟؟ اگر ممکنه با ذکر مثال بیان کننین
2010/10/28 02:47 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
parsig آفلاین
Super Moderator
******

ارسال‌ها: 323
تاریخ عضویت: Jan 2010
رتبه: 6
تشکر: 131
357 بار تشکر شده در 179 پست
ارسال: #2
RE: انتخاب 2 تیبل
سلام
به انجمن پشتیبانی و توسعه کیک پی اچ پی فارسی خوش اومدید !
راه برا این کار زیاده !

اول این که داخل کلاس کنترلر تون یه متغیر تغریف کنید به صورت زیر :
کد PHP:
var $uses = array('User''Group'); 

راه بعدی اینکه در همون متدی که می خواید از گروه ها تون استفاده کنید از دستور زیر استفاده کنید
کد PHP:
$this->loadModel('Group'); 

بعدش می تونید فرض کنید که توی کنترلر گروپ هستید و به دیتا های تیبل دسترسی داشته باشید
و راه های دیگه که سرچ کنید پیدا می کنید
موفق باشید

[تصویر: ubuntu2_userbar.gif]
یک برنامه نویس
آنکه مست آمد و دستی به دل ما زد رفت ... در این خانه ندانم به چه سودا زد و رفت
(آخرین تغییر در این ارسال: 2010/10/28 10:44 AM توسط parsig.)
2010/10/28 10:43 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
tanha آفلاین
عضو جدید
*

ارسال‌ها: 9
تاریخ عضویت: Oct 2010
رتبه: 0
تشکر: 0
0 بار تشکر شده در 0 پست
ارسال: #3
RE: انتخاب 2 تیبل
ممنون از پاسختون ، بنده هم دقیقا از اینجا به بعدش رو مشکل دارم چون 2 تا تیبیل هست و تعادل به این صورت هست که 100 کاربر هست و 5 تا گروه
2010/10/28 11:03 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
tanha آفلاین
عضو جدید
*

ارسال‌ها: 9
تاریخ عضویت: Oct 2010
رتبه: 0
تشکر: 0
0 بار تشکر شده در 0 پست
ارسال: #4
RE: انتخاب 2 تیبل
ممنون از پاسختون ، بنده هم دقیقا از اینجا به بعدش رو مشکل دارم چون 2 تا تیبیل هست و تعادل به این صورت هست که 100 کاربر هست و 5 تا گروه
2010/10/28 11:03 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 988
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
869 بار تشکر شده در 559 پست
ارسال: #5
RE: انتخاب 2 تیبل
سلام خوش آمدید،
اول از همه درخواست میکنم در کار کردن با کیک اصول اولیه رو رعایت کنید.


1- از uses استفاده نکنید. چون در نسخه 2 حذف شده.
2- حتما حتما برای هر تیبل مدال ایجاد کنید. حتی اون تیبل هیچ ویویی نداشته باشه.
3- جهت ار تباط مودل ها از روش های ارتباطی در مودل ها استفاده کنید.
4- در مورد سوالتون برای اینکار اگر اصل شماره 3 رو رعایت کرده باشید. میتونید به این صورت عمل کنید.
کد PHP:
$this->paginate['User'] = array( 'contian' => array('Group.Expier'));
      
$data $this->paginate('User'); 
2010/10/28 02:21 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
tanha آفلاین
عضو جدید
*

ارسال‌ها: 9
تاریخ عضویت: Oct 2010
رتبه: 0
تشکر: 0
0 بار تشکر شده در 0 پست
ارسال: #6
RE: انتخاب 2 تیبل
از پاسختون ممنونم
من اینجوری گذاشتم اما اصلا تیبیل گروه رو در نظر نمیگیره
کد PHP:
public function admin_index()
    {
      
$this->loadModel('ugroup');



      
$this->paginate['User'] = array( 'contian' => array('ugroup.ExpireDate'));
      
$data $this->paginate('User');
      
pr($data);
     
        } 

ببینین منظور من این هست که من میخوام یه جوری باشه که انگار وقتی تیبیل یوزر رو paginate میکنی یه column اکتیو دیت هم اضافه بشه تو ارایه اما در حقیقت توی اون تیبل هست
ببینین منظور من این هست که من میخوام یه جوری باشه که انگار وقتی تیبیل یوزر رو paginate میکنی یه column اکتیو دیت هم اضافه بشه تو ارایه اما در حقیقت توی اون تیبل هست
(آخرین تغییر در این ارسال: 2010/10/28 08:54 PM توسط tanha.)
2010/10/28 08:50 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
cybercoder غایب
Expired
**

ارسال‌ها: 108
تاریخ عضویت: Dec 2009
رتبه: 1
تشکر: 51
82 بار تشکر شده در 46 پست
ارسال: #7
RE: انتخاب 2 تیبل
باید containable رو هم شامل کنید تا contain عمل کنه
2010/10/28 09:55 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
tanha آفلاین
عضو جدید
*

ارسال‌ها: 9
تاریخ عضویت: Oct 2010
رتبه: 0
تشکر: 0
0 بار تشکر شده در 0 پست
ارسال: #8
RE: انتخاب 2 تیبل
واضخ تر توضیح میدین ؟؟ اگه ممکن هست با یک مثال
واضخ تر توضیح میدین ؟؟ اگه ممکن هست با یک مثال
(آخرین تغییر در این ارسال: 2010/10/28 10:30 PM توسط tanha.)
2010/10/28 10:30 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 988
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
869 بار تشکر شده در 559 پست
ارسال: #9
RE: انتخاب 2 تیبل
یعنی تو مدال هاتون از رفتار کمننده containable استفاده کنید
2010/10/29 09:59 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
tanha آفلاین
عضو جدید
*

ارسال‌ها: 9
تاریخ عضویت: Oct 2010
رتبه: 0
تشکر: 0
0 بار تشکر شده در 0 پست
ارسال: #10
RE: انتخاب 2 تیبل
من به اینصورت نوشتم اما این خطا رو میده
کد PHP:
public function admin_index()
{
       
$this->loadModel('Ugroup');
       
        
      
$this->paginate['User'] = array(
         
'contain'=>array(
                
'ugroup.id',

            ),




      
'limit' => 10,

       );
       
pr($this->paginate('User'));

      

    } 


مدل
کد PHP:
class User extends AppModel {



    public 
$name 'User';

      public 
$actsAs = array('Containable');




خطا :

Warning (512): Model "User" is not associated with model "Ugroup" [CORE\cake\libs\model\behaviors\containable.php, line 363]
2010/11/02 05:20 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
tanha آفلاین
عضو جدید
*

ارسال‌ها: 9
تاریخ عضویت: Oct 2010
رتبه: 0
تشکر: 0
0 بار تشکر شده در 0 پست
ارسال: #11
RE: انتخاب 2 تیبل
من به اینصورت نوشتم اما این خطا رو میده
کد PHP:
public function admin_index()
{
       
$this->loadModel('Ugroup');
       
        
      
$this->paginate['User'] = array(
         
'contain'=>array(
                
'Ugroup.id',

            ),




      
'limit' => 10,

       );
       
pr($this->paginate('User'));

      

    } 


مدل
کد PHP:
class User extends AppModel {



    public 
$name 'User';

      public 
$actsAs = array('Containable');




خطا :

Warning (512): Model "User" is not associated with model "Ugroup" [CORE\cake\libs\model\behaviors\containable.php, line 363]


عاجزانه تقاضای کمک دارممممممممممممممممممممممم
(آخرین تغییر در این ارسال: 2010/11/02 05:22 PM توسط tanha.)
2010/11/02 05:20 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 988
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
869 بار تشکر شده در 559 پست
ارسال: #12
RE: انتخاب 2 تیبل
ساختار تیبل یوزر و گروپ رو اینجا قرار بدید. همینطور که از ارور مشخصه هیچ ارتباطی بینشون نیست؟


و سوال بعدی رابطه این 2 تیبل مستقیم هست؟ یا تیبل واسه وجود داره؟

مثلا

profile =>user => Ugroup
or
user => ugroup
2010/11/02 05:49 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
tanha آفلاین
عضو جدید
*

ارسال‌ها: 9
تاریخ عضویت: Oct 2010
رتبه: 0
تشکر: 0
0 بار تشکر شده در 0 پست
ارسال: #13
RE: انتخاب 2 تیبل
رابطه مستقیم هست

کد PHP:
CREATE TABLE IF NOT EXISTS `users` (
  `
idbigint(21NOT NULL AUTO_INCREMENT,
  `
usernamevarchar(32COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
passwordvarchar(32COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
Resellervarchar(32COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
GroupNamevarchar(32COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
ExpireDatevarchar(10COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
UserStatusenum('E','D','S','G','W'COLLATE utf8_unicode_ci NOT NULL DEFAULT 'G',
  `
StartTimedatetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `
Familyvarchar(30COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
Emailvarchar(60COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
Phonevarchar(30COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  
PRIMARY KEY (`id`),
  
UNIQUE KEY `UserName` (`UserName`),
  
KEY `GroupName` (`GroupName`),
  
KEY `Reseller` (`Reseller`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=27743 

گروه
کد PHP:
CREATE TABLE IF NOT EXISTS `ugroup` (
  `
Resellervarchar(32NOT NULL DEFAULT '',
  `
GroupNamevarchar(32CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
ActiveDayssmallint(6NOT NULL DEFAULT '365',
  `
ExpireDatevarchar(10NOT NULL DEFAULT '',
  
UNIQUE KEY `GroupName` (`GroupName`),
  
KEY `Reseller` (`Reseller`)
ENGINE=MyISAM DEFAULT CHARSET=latin1

ارتباط بصورت مستقیم دارن
2010/11/03 01:44 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
tanha آفلاین
عضو جدید
*

ارسال‌ها: 9
تاریخ عضویت: Oct 2010
رتبه: 0
تشکر: 0
0 بار تشکر شده در 0 پست
ارسال: #14
RE: انتخاب 2 تیبل
رابطه مستقیم هست

کد PHP:
CREATE TABLE IF NOT EXISTS `users` (
  `
idbigint(21NOT NULL AUTO_INCREMENT,
  `
usernamevarchar(32COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
passwordvarchar(32COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
Resellervarchar(32COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
GroupNamevarchar(32COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
ExpireDatevarchar(10COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
UserStatusenum('E','D','S','G','W'COLLATE utf8_unicode_ci NOT NULL DEFAULT 'G',
  `
StartTimedatetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `
Familyvarchar(30COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
Emailvarchar(60COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
Phonevarchar(30COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  
PRIMARY KEY (`id`),
  
UNIQUE KEY `UserName` (`UserName`),
  
KEY `GroupName` (`GroupName`),
  
KEY `Reseller` (`Reseller`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=27743 

گروه
کد PHP:
CREATE TABLE IF NOT EXISTS `ugroup` (
  `
Resellervarchar(32NOT NULL DEFAULT '',
  `
GroupNamevarchar(32CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `
ActiveDayssmallint(6NOT NULL DEFAULT '365',
  `
ExpireDatevarchar(10NOT NULL DEFAULT '',
  
UNIQUE KEY `GroupName` (`GroupName`),
  
KEY `Reseller` (`Reseller`)
ENGINE=MyISAM DEFAULT CHARSET=latin1

ارتباط بصورت مستقیم دارن

از توجهتون ممنون
(آخرین تغییر در این ارسال: 2010/11/03 01:45 AM توسط tanha.)
2010/11/03 01:44 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
thinking21 آفلاین
تازه کار
*

ارسال‌ها: 27
تاریخ عضویت: Sep 2010
رتبه: 0
تشکر: 10
0 بار تشکر شده در 1 پست
ارسال: #15
RE: انتخاب 2 تیبل
(2010/10/28 02:21 PM)saleh نوشته است:  سلام خوش آمدید،
اول از همه درخواست میکنم در کار کردن با کیک اصول اولیه رو رعایت کنید.


1- از uses استفاده نکنید. چون در نسخه 2 حذف شده.
2- حتما حتما برای هر تیبل مدال ایجاد کنید. حتی اون تیبل هیچ ویویی نداشته باشه.
3- جهت ار تباط مودل ها از روش های ارتباطی در مودل ها استفاده کنید.
4- در مورد سوالتون برای اینکار اگر اصل شماره 3 رو رعایت کرده باشید. میتونید به این صورت عمل کنید.
کد PHP:
$this->paginate['User'] = array( 'contian' => array('Group.Expier'));
      
$data $this->paginate('User'); 

سلام
--------- جهت ار تباط مودل ها از روش های ارتباطی در مودل ها استفاده کنید. --------
می شه این روش ارتباطی در مودل ها رو بگین ؟
من خودم چند تا از مثال های کتاب Beginning CakePHP
From Novice to Professional
رو که اجرا کردم چند تا متغیر اعلام کرده که نتونستم بفهمم که چه طوری کار می کنن
کد PHP:
Post extends AppModel{
        var 
$name 'Post';
        var 
$belongsTo = array('User');
        var 
$hasAndBelongsToMany = array('Tag');
        var 
$hasMany = array('Comment');

در قسمت کنترلر پست از جدول یوزر وتگ استفاده کرده بود
ممنون
موفق باشید.
(آخرین تغییر در این ارسال: 2010/11/03 08:36 PM توسط thinking21.)
2010/11/03 08:33 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
sajadonline آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 4
7 بار تشکر شده در 8 پست
ارسال: #16
RE: انتخاب 2 تیبل
حالا ما نفهمیدیم جواب دادین یا شما هم سوال پرسیدین ؟
2010/11/04 01:15 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
thinking21 آفلاین
تازه کار
*

ارسال‌ها: 27
تاریخ عضویت: Sep 2010
رتبه: 0
تشکر: 10
0 بار تشکر شده در 1 پست
ارسال: #17
RE: انتخاب 2 تیبل
(2010/11/04 01:15 AM)sajadonline نوشته است:  حالا ما نفهمیدیم جواب دادین یا شما هم سوال پرسیدین ؟
نه دوست عزیز من هم سئوال کردم
2010/11/04 09:45 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 988
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
869 بار تشکر شده در 559 پست
ارسال: #18
RE: انتخاب 2 تیبل
اولین قدم در کار با کیک همین در نظر گرفتن قوانین هست.
مثلا در طراحی دیتا بیس فیلد هایی که کلید خارجی محسوب می شوند باید به صورت
کد:
tablename_filedname
باشند. حالا من 2 تیبل رو براتون طراحی می کنم به شکل زیر :

کد PHP:
CREATE TABLE users (
    
id INT(11NOT NULL AUTO_INCREMENT PRIMARY KEY,
    
username VARCHAR(255NOT NULL UNIQUE,
    
password CHAR(40NOT NULL,
    
group_id INT(11NOT NULL,
    
created DATETIME,
    
modified DATETIME
);

 
CREATE TABLE groups (
    
id INT(11NOT NULL AUTO_INCREMENT PRIMARY KEY,
    
name VARCHAR(100NOT NULL,
    
created DATETIME,
    
modified DATETIME
);


CREATE TABLE posts (
    
id INT(11NOT NULL AUTO_INCREMENT PRIMARY KEY,
    
user_id INT(11NOT NULL,
    
title VARCHAR(255NOT NULL,
    
body TEXT,
    
created DATETIME,
    
modified DATETIME
); 

اگر دقت کنید. تیبل ها به صورت زیر با هم رابطه دارند.

کد:
Users   => [group_id] ===> Groups
posts ==> [user_id] ===> users

خوب این قوانین کیک هست. البته در خیلی از فریم ورک های دیگه هم به همین صورت هست.

اما استاندارد رابطه سازی بین مودال ها یا تیبل ها به صورت زیر هست.
کد PHP:
<?php

class Post extends AppModel {
    public 
$name 'Post';
    public 
$belongsTo = array(
        
'User' => array(
            
'className' => 'User';
            
'foreignKey' => 'user_id'
        
)
    );
    
}


class 
User extends AppModel {
    var 
$name 'User';
    public 
$belongsTo = array(
        
'Group' => array(
            
'className' => 'Group';
            
'foreignKey' => 'group_id'
        
)
    );
    public 
$hasMany = array(
        
'Post' => array(
            
'className' => 'Post';

        )
    );        
}


class 
Group extends AppModel {
    var 
$name 'Group';
    public 
$hasMany = array(
        
'User' => array(
            
'className' => 'User';

        )
    );        
    


hasOne : ارتباط 1=1 هست
hasMany : ارتباط یک به nتا هست
belongsTo : ارتباط nتا به 1 هست

برای اطلاعات بیشتر به
نقل قول:http://book.cakephp.org/view/1039/Associ...Types-1040

مراجعه کنید.
2010/11/04 02:53 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
ارسال موضوع  ارسال پاسخ 


پرش در انجمن: