я имею tutor_students
а также users
Таблица. tutor_students
содержит id
, tutor_id
, student_id
а также created
, users
содержать id
, user_id
, role_id
, email
, first_name
, last_name
, tutor_students
Стол соединен между учеником и учеником. так что репетитор может видеть список своих учеников и добавлять новых учеников.
Мне удалось отобразить список учеников и добавить нового ученика в список учеников репетитора. но когда я хочу найти студента, будет ошибка:
Ошибка: SQLSTATE [42S22]: столбец не найден: 1054 неизвестный столбец
‘User.email’ в ‘предложении where’SQL-запрос: SELECT
TutorStudent
,id
,TutorStudent
,tutor_id
,
TutorStudent
,student_id
,TutorStudent
,created
ОТ
virlen
,tutor_students
КАКTutorStudent
ГДЕ
TutorStudent
,tutor_id
НУЛЬ ИUser
,
‘%Ka@mailinator.com%’
Мой контроллер:
public function admin_tutor_add_student($tutor_id = null)
{
$user_list = '';
$this->loadModel('TutorStudent');
$this->set('title_for_layout','User');
$this->User->bindModel(array(
'belongsTo'=>array(
'Standard'=>array(
'className'=>'Standard'
),
)
),false);
$this->User->id = $tutor_id;
/*form post and check conditions*/
// if ($this->request->is('post') || $this->request->is('put'))
if(!empty($this->request->data) && isset($this->request->data['User']['status1']))
{
// pr($this->request->data);die;
$action = $this->request->data['User']['pageAction'];
foreach ($this->request->data['User'] AS $value) {
if ($value != 0) {
$ids[] = $value;
}
}
// pr($ids);die;
if (!empty($this->request->data))
{
if (!isset($this->request->params['_Token']['key']) || ($this->request->params['_Token']['key'] != $this->request->params['_Token']['key']))
{
$blackHoleCallback = $this->Security->blackHoleCallback;
$this->$blackHoleCallback();
}
foreach($ids as $id)
{
if(!empty($id))
{
if($id != 1)
{
$shift = array();
$shift['TutorStudent']['tutor_id'] = $tutor_id;
$shift['TutorStudent']['student_id'] = $id;
$this->TutorStudent->save($shift);
$this->TutorStudent->id = false;
}
}
}
$this->Session->setFlash("Tutor has been added successfully", 'admin_flash_good');
$this->redirect(array('controller'=>'users', 'action'=>'subadmin_tutor',$tutor_id));
}
}
if (!isset($this->params['named']['page']))
{
$this->Session->delete('AdminSearch');
}
$email = '';
$first_name = '';
$role_id = '';
$status = '';
if (!empty($this->request->data))
{
$this->Session->delete('AdminSearch');
if (isset($this->request->data['User']['first_name']) && $this->request->data['User']['first_name'] != '')
{
$first_name = trim($this->request->data['User']['first_name']);
$this->Session->write('AdminSearch.first_name', $first_name);
}
if (isset($this->request->data['User']['email']) && $this->request->data['User']['email'] != '')
{
$email = trim($this->request->data['User']['email']);
$this->Session->write('AdminSearch.email', $email);
}
}
$filters = array('TutorStudent.tutor_id'=>$tutor_id);
if ($this->Session->check('AdminSearch'))
{
$keywords = $this->Session->read('AdminSearch');
foreach($keywords as $key=>$values)
{
if($key == 'email')
{
$email = $values;
$filters[] = array('User.'.$key.' LIKE'=>"%".$values."%");
}
if($key == 'first_name')
{
$first_name = $values;
$filters[] = array('User.'.$key.' LIKE'=>"%".$values."%");
}
}
}
$my_tutor_list = $this->TutorStudent->find('all',array('conditions'=>$filters));
if(!empty($my_tutor_list))
{
foreach($my_tutor_list as $key=>$value)
{
$user_list[] = $value['TutorStudent']['student_id'];
}
}
$this->paginate = array('User' => array(
'limit' =>Configure::read('App.PageLimit'),
'order' => array('User.id' => 'DESC'),
'conditions'=>array('User.id !='=>$user_list,'User.role_id'=>2),
)); //role_id 2 means student user
$student_list = $this->paginate('User');
// pr($student_list);die;
$this->loadModel('Standard');
$standards = $this->Standard->getStandardList();
$this->set(compact('standards'));
$this->set(compact('student_list','tutor_id','standard_id', 'User', 'email', 'first_name'));
$this->set('title_for_layout', __('User', true));
}
это мой файл просмотра:
<?php echo($this->Form->create('User', array('url'=>array('controller' => 'users', 'action' => 'tutor_add_student'))));?>
<div class="box-body table-responsive">
<div class="box box-danger">
<div class="full box-header">
<h3 class="box-title">Search</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-xs-2">
<label for="exampleInputPassword1">User Email</label>
<?php echo($this->Form->input('User.email', array('placeholder'=>"Tutor Email",'label' => false,'value'=>$email, 'div'=>false,'class'=>'form-control'))); ?>
</div>
<div class="col-xs-2">
<label for="exampleInputPassword1">First Name </label>
<?php echo($this->Form->input('User.first_name', array('placeholder'=>"First Name",'label' => false,'value'=>$first_name, 'div'=>false,'class'=>'form-control'))); ?>
</div>
<div class="col-xs-2" style="margin-top: 5px;">
<br /><?php echo($this->Form->submit('Search', array('div'=>false, 'class'=>'btn btn-primary pull-left')));?>
</div>
</div>
</div><!-- /.box-body -->
</div>
</div>
<?php echo($this->Form->end());?>
Это моя модель приложения для пользователя:
<?php
/**
* Country
*
* PHP version 5
*
* @category Model
*
*/
// App::uses('AuthComponent', 'Controller/Component');
// App::uses('SessionComponent', 'Controller/Component');
App::uses('AppModel', 'Model');
class User extends AppModel{
//public $primaryKey = '_id';
/**
* Model name
* @var string
* @access public
*/
var $name = 'User';
/**
* Behaviors used by the Model
*
* @var array
* @access public
*/
var $actsAs = array(
'Multivalidatable'
);var $validationSets = array(
'login'=> array(
'email'=>array(
'notEmpty' => array(
'rule' => 'notEmpty',
'message' => 'Email address is required'
),
'R2'=>array(
'rule'=>array('maxLength', 50),
'message'=>'Email can be maximum 50 characters long.'
),
'email' => array(
'rule' => 'email',
'message' => 'Please provide a valid email address.'
),
),
'password'=>array(
'R1'=>array(
'rule'=>'notEmpty',
'message' => 'Password is required.'
),
'R3'=>array(
'rule'=>array('minLength', 6),
'message'=>'Password must be at least 6 characters long.'
),
'R4'=>array(
'rule'=>array('maxLength', 20),
'message'=>'Password must be at least 20 characters long.'
),
),
),
'add'=> array(
'first_name'=>array(
'R1'=>array(
'rule'=>'notEmpty',
'message' => 'First name is required.'
),
'R2'=>array(
'rule'=>array('maxLength', 255),
'message'=>'First Name can be maximum 255 characters long.'
),
'characters' => array(
'rule' => array('custom', '/^[a-z]*$/i'),
'message' => 'Alphabet characters only'
)
),
'last_name'=>array(
'R1'=>array(
'rule'=>'notEmpty',
'message' => 'Last name is required.'
),
'R2'=>array(
'rule'=>array('maxLength',255),
'message'=>'Last name can be maximum 255 characters long.'
),
'characters' => array(
'rule' => array('custom', '/^[a-z]*$/i'),
'message' => 'Alphabet characters only'
)
),
'standard_id'=>array(
'R1'=>array(
'rule'=>'notEmpty',
'message' => 'Standard is required.'
)
),
'role_id'=>array(
'R1'=>array(
'rule'=>'notEmpty',
'message' => 'Role is required.'
)
),
'specilization'=>array(
'R1' => array(
'rule' => 'notEmpty',
'message' => 'Specilization is required.'
),
'R2'=>array(
'rule'=>array('maxLength', 255),
'message'=>'Specilization can be 255 characters long.'
),
),
'phone'=>array(
'R1' => array(
'rule' => 'notEmpty',
'message' => 'Phone number is required.'
),
'notEmpty' => array(
'rule' => 'numeric',
'message' => 'Phone number should be numeric'
),
'R2'=>array(
'rule'=>array('minLength', 8),
'message'=>'Phone number shuold be minimum 8 numbers long'
),
'R3'=>array(
'rule'=>array('maxLength', 12),
'message'=>'Phone number should be maximum 12 numbers long'
),
/* 'R4'=>array(
'rule'=>array('CheckPhoneVailidation'),
'message'=>'Phone no should be start with 82 to 87.'
), */
),
'email'=>array(
'notEmpty' => array(
'rule' => 'notEmpty',
'message' => 'Email address is required'
),
'R2'=>array(
'rule'=>array('maxLength', 50),
'message'=>'Email can be maximum 50 characters long.'
),
'isUnique' => array(
'rule' => 'isUnique',
'message' => 'Email already exists.'
),
'email' => array(
'rule' => 'email',
'message' => 'Please provide a valid email address.'
),
),
'new_password'=>array(
'R1'=>array(
'rule'=>'notEmpty',
'message' => 'Password is required.'
),
'R3'=>array(
'rule'=>array('minLength', 6),
'message'=>'Password must be at least 6 characters long.'
),
'R4'=>array(
'rule'=>array('maxLength', 20),
'message'=>'Password must be at least 20 characters long.'
),
),
'confirm_password'=>array(
'identicalFieldValues' => array(
'rule' => array('identicalFieldValues', 'new_password'),
'message' => 'Password and confirm password mismatch'
),
'R1' => array(
'rule' => 'notEmpty',
'message' => 'Confirm password is required.'
)
),
'image' => array(
'R1' => array(
'rule' => array('checkextension'),
'message' => 'Please upload only image files'
)
),
)
);
}
Вы должны содержать User
модель в вашем find
вопрос: —
$this->TutorStudent->find('all', array(
'conditions' => $filters,
'contain' => array('User')
);
Таблица User не включена в запрос, вы должны попробовать что-то вроде:
SELECT TutorStudent.id, TutorStudent.tutor_id, TutorStudent.student_id, TutorStudent.created
FROM virlen.tutor_students AS TutorStudent join
virlen.User as user
on user.id = tutorstudent.student_id
WHERE TutorStudent.tutor_id IS NULL AND User.email LIKE '%ka@mailinator.com%';
Это при условии, что ключ таблицы пользователя, используемый в tutor_student.student_id, является id, а не user_id, и в этом случае вы должны соответственно изменить свой код, чтобы он был таким: on user.user_id = tutorstudent.student_id
предложение from должно быть
virlen.tutor_students AS TutorStudent,virlen.users AS User
Тогда ваш запрос должен быть
SELECT TutorStudent.id, TutorStudent.tutor_id, TutorStudent.student_id, TutorStudent.created FROM virlen.tutor_students AS TutorStudent,virlen.users AS User WHERE TutorStudent.tutor_id IS NULL AND User.email LIKE '%ka@mailinator.com%'
Ваш код должен быть
$my_tutor_list = $this->TutorStudent->find('all',array('conditions'=>$filters,'contain' => array('User')));
if(!empty($my_tutor_list))
{
foreach($my_tutor_list as $key=>$value)
{
$user_list[] = $value['TutorStudent']['student_id'];
}
}