1

当涉及多个表时,我应该如何命名模型?

例如,

//学生表

class Students extends Model{

     function addStudent(){  
        //code  
     };

     function editStudent($id){  
        //code  
     }; 

     function deleteStudent($id){  
        //code  
     }; 

     function viewStudent($id){  
        //code  
     }; 

     function viewStudents(){  
        //code  
     };
}

//对于教授表

class Professors extends Model{

     function addProfessor(){  
        //code  
     };

     function editProfessor($id){  
        //code  
     }; 

     function deleteProfessor($id){  
        //code  
     }; 

     function viewProfessor($id){  
        //code  
     }; 

     function viewProfessors(){  
        //code  
     };
}

如果我想展示学生和他们的教授,是否必须编写一个单独的模型,例如,

 class StudentsProfessors extends Model{
       function get_students_professors(){
          // $query = SELECT s.name, p.name FROM students AS s, professors AS p WHERE s.id=p.id 
       }
 }

或者,上面的方法,get_students_professors函数可以写在Student类或者Professor类中。

最佳做法是什么?

4

2 回答 2

1

由于这个问题有很多不同的答案,原因有很多,最好的办法是问问自己什么感觉最合乎逻辑并采取相应的行动。最坏的情况是,一年后你回来并意识到“为什么我不那样做”,并且你学会了将来如何去做。

在您的情况下,我不会创建新模型。如果您为表之间的每个关系创建一个新模型,您最终会得到很多模型来跟踪。

除了您的实际问题之外,camelCasing 和名称的重复是我会改变的。我宁愿$this->students->add()over $this->students->addStudent(),而且我个人甚至会合并这两个view函数来做同样的事情,但附加WHERELIMIT是价值。


我只是将该函数放在最相关的模型中。在您的示例中,它们看起来同样相关,因此我将简单地Students使用名为 或类似的join_with_professors函数view_join_professors。在给定的情况下,我通常会得到最好的函数名。

于 2013-08-09T09:58:11.750 回答
1

CodeIgniters MVC 实现是一大堆 [亵渎删除]。我建议你自己组装关系。将您的教授模型的实例传递给您的学生模型并上下颠倒。

这样您就可以执行以下操作: $this->student->with('professor')->get(1); 或类似的东西。

您可能需要破解 CI 的模型才能实现这一点。

已经有一些看起来相当可靠的实现(仅从文档中看到)。看看这个:https ://github.com/jamierumbelow/codeigniter-base-model

于 2013-08-09T09:47:44.510 回答