我正在上数据库课程,讲师希望我们开发电子商务应用程序。她说我们可以使用我们喜欢的任何框架,现在我们已经过了学期的一半,她认为 Rails 做的太多,并希望我明确地编写我的 SQL 查询。
所以,我想做的是编写自己的函数并将它们添加到模型中,以基本上复制现有的功能(但使用我自己编写的 SQL)。
那么问题就变成了:
另外,我知道这是多么糟糕的做法,我只是不想在这一点上从头开始使用 PHP。
我正在使用 parseresource gem,它说我需要创建一个模型。
创建模型:
class Post < ParseResource
fields :title, :author, :body
validates_presence_of :title
end
Run Code Online (Sandbox Code Playgroud)
我只知道如何生成一个模式,它总是继承 ActiveRecord::Base。我应该在命令行中输入什么来创建这个模型?
我在模型中遇到以下问题:
class Search < ActiveRecord::Base
#search different system user by dn
def self.gets(sys, dn)
sys.constantize.search(dn)
end
end
Run Code Online (Sandbox Code Playgroud)
我可以看到,目的是传递不同的模型名称,sys并dn在这些特定模型中进行搜索。但是,我constantize在Ruby中进行了搜索,看不到有关此用法的任何详细说明。
我的模型测试如下
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Test extends Model
{
use SoftDeletes;
protected $dates = ['deleted_at'];
public function __construct() {
if (!\App::environment('production')) {
$this->table='test_stage';
}
}
Run Code Online (Sandbox Code Playgroud)
我确保test_stage表中有一个'deleted_at'列.但软删除不起作用.使用delete()方法永久删除表中的记录.作为验证的附加步骤,我手动为某些列添加了"deleted_at"值.但查询模型仍然给我软删除记录.
此外,完全删除模型构造函数,并使用以下命令定义表名:
protected $table = 'test_stage';
Run Code Online (Sandbox Code Playgroud)
奇迹般有效!那是软删除神奇地再次开始工作.
或者有没有办法根据环境定义表名而无需定义构造函数?
我有一个具有头像的用户模型.Paperclip用于允许图像上传.但是,我希望用户能够上传尽可能多的图像(无限制).如何修改我的模型以允许此类行为?用户模型如下所示:
class Model < ApplicationRecord
has_attached_file :pic, styles: { medium: "420×633!", thumb: "100x100#" }, default_url: "/images/:style/missing.png"
validates_attachment_content_type :pic, content_type: /\Aimage\/.*\z/
has_many :reviews, dependent: :destroy
Run Code Online (Sandbox Code Playgroud)
提前致谢 !
我正在尝试使用Slim3框架以及Twig模板系统在php中创建一个身份验证系统,对于数据库,我正在使用MySQL和PDO。我也在尝试使用模型视图控制器设计模式来实现它。但是我很难理解如何为Web应用程序使用MVC结构。我在网上查看了过多的解释,似乎没有明确的答案。很多人说要使用PHP框架,例如Laravel,Symfony或CodeIgniter,因为他们显然采用了类似MVC的结构。但是,我宁愿保持简单,并手动编写代码,而不是使用框架。
我目前对MVC有两种解释。此图中描绘了第一个:
我看到的另一种解释是:(摘自该YouTube视频)
我已经做了研究。问题和答案,如这和这个是有帮助的。但是我仍然不确定如何构造自己的应用程序,特别是识别和理解MVC的模型方面。现在,我将说明身份验证应用程序的注册过程。这样您就知道我的代码是如何工作的。
首先,我有一个SQLQueries类,该类将一系列SQL语句简单地放入函数中。然后,我有一个SQLWrapper类,该类具有的功能可以例如在数据库中存储新用户的详细信息。此类还从SQLQueries类调用函数。我也有一个ValidateSanitize类,该类具有清理用户输入以及检查用户输入在表单中是否有效的功能。我认为这三个类是MVC模型方面的一部分,但我不确定。我看到了许多其他的使用“用户模型类”的教程,但我的应用程序中找不到它们。
我的视图只是显示HTML的Twig模板,例如主页,注册,登录等。然后我有了控制器。我打算让多个控制器执行不同的操作。目前,我只实现了AuthController,该控制器负责注册和登录用户。
因此,AuthController要做的第一件事是在名为getRegisterForm的函数中显示注册表。用户提交表单后,postRegisterForm函数将获取该用户输入并将其分配给有污染的变量。
public function postRegisterForm($request, $response)
{
$arr_tainted_params = $request->getParsedBody();
$tainted_email = $arr_tainted_params['email']; it a variable
$tainted_username = $arr_tainted_params['username'];
$tainted_password = $arr_tainted_params['password'];
$tainted_password_confirm = $arr_tainted_params['password_confirm'];
Run Code Online (Sandbox Code Playgroud)
接下来,实例化所有前面的三个类以及数据库详细信息,以便可以在AuthController中使用它们的功能:
$sanitizer_validator = $this->container->ValidateSanitize;
$sql_wrapper = $this->container->SQLWrapper;
$sql_queries = $this->container->SQLQueries;
$db_handle = $this->container->get('dbase');
Run Code Online (Sandbox Code Playgroud)
然后,使用sanitize_input函数清除受污染的用户详细信息。然后,将清理后的用户详细信息输入到validate函数中,以确保它们不会触发任何验证冲突。密码也在此处散列:
$cleaned_email = $sanitizer_validator->sanitize_input($tainted_email, FILTER_SANITIZE_EMAIL);
$cleaned_username = $sanitizer_validator->sanitize_input($tainted_username, FILTER_SANITIZE_STRING);
$cleaned_password = $sanitizer_validator->sanitize_input($tainted_password, FILTER_SANITIZE_STRING);
$cleaned_password_confirm = $sanitizer_validator->sanitize_input($tainted_password_confirm, FILTER_SANITIZE_STRING);
$hashed_cleaned_password = password_hash($cleaned_password, PASSWORD_DEFAULT);
$sanitizer_validator->check_email_exists($cleaned_email);
$sanitizer_validator->validate_email($cleaned_email);
$sanitizer_validator->validate_username($cleaned_username);
$sanitizer_validator->validate_password($cleaned_password);
$sanitizer_validator?validate_password_confirm($cleaned_password_confirm);
Run Code Online (Sandbox Code Playgroud)
最后,有一个if语句,检查所有验证错误消息是否为空。如果是的话,我们将为SQLWrapper类提供数据库详细信息以及SQLQueries类对象。然后,通过调用SQLWrapper类store-details函数将用户详细信息插入数据库。最后,我们将用户定向到登录页面,以便用户可以登录其新注册的帐户。
if ($sanitizer_validator->get_validate_messages('email_error') == ' …Run Code Online (Sandbox Code Playgroud) 是)我有的
如下图所示,我使用Three.js库创建WEBGL画布,并使用GLTFLoader.js在场景中加载.gltf模型。
我使用的代码
//Add THREE Renderer
renderer_Main = new THREE.WebGLRenderer({ antialias: true });
renderer_Main.setSize(canvasWidth, canvasHeight); //Set Renderer Size
//Add THREE Scene
scene_Main = new THREE.Scene();
//Add First THREE Camera
camera_Main = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.01, 10000);
camera_Main.position.set(-2000, 500, 500); //Set camera position
//Add THREE Grid Helper
var size = 1000; //Value of Each Square Size
var divisions = 60; //Value of Grid Divisions
gridHelper = new THREE.GridHelper(size, divisions);
gridHelper.material.opacity = 0.045;
gridHelper.material.transparent = false;
scene_Main.add(gridHelper); //Add Grid in …Run Code Online (Sandbox Code Playgroud) 在阅读有关使用模型的AEM文档时,我无法弄清楚该字段上方的@Inject和@ValueMapValue注释之间的区别。
我尝试使用两者,并且两者看起来都一样,所以我一定缺少一些东西。
I have this relation defined in one of my models. It is the simplest possible case.
use \App\Models\Related;
public function entities()
{
return $this
->belongsToMany(Entity::class, 'entity_related', 'related_id', 'entity_id');
}
Run Code Online (Sandbox Code Playgroud)
Now, I want to create a relation which gets only one model from the table.
我只是定义了相同的关系,但使用->take(1)。粗暴,但行得通。该解决方案的低迷之处在于,我需要做一个foreach循环以获得所需的单个模型。
use \App\Models\Entity;
public function firstOfEntities()
{
return $this
->belongsToMany(Entity::class, 'entity_related', 'related_id', 'entity_id')
->take(1); // <---
}
Run Code Online (Sandbox Code Playgroud)
如何正确定义仅获取一个(几乎任何一个)模型实例的关系,而不是创建一个集合?
完成上述操作后,我希望能够在foreach循环内在模板文件中使用单个模型:
@foreach($object as $o)
<h2>{{ $o->singleEntity->name }}</h2>
<p>{{ …Run Code Online (Sandbox Code Playgroud) 我解释我的问题:
我有2个型号:
- User (id, firstname, lastname, deviceid, email, password);
- Message (id, fromuser, touser, description)
Run Code Online (Sandbox Code Playgroud)
我想要外键:
-: fromuser (Message) -> id (User)
-: touser (Message) -> id (User)
Run Code Online (Sandbox Code Playgroud)
在我的模型中:
USER
-> has_many :messages
MESSAGE
-> belongs_to :users
Run Code Online (Sandbox Code Playgroud)
在我的架构迁移中:
create_table "messages", force: :cascade do |t|
t.string "description"
t.integer "fromuser"
t.integer "touser"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
create_table "users", force: :cascade do |t|
t.string "firstname"
t.string "lastname"
t.string "deviceid"
t.string "email"
t.string "password" …Run Code Online (Sandbox Code Playgroud)