我想在Laravel中创建一大堆模型对象实例,然后选择最佳实例并将其保存到数据库中.我知道我可以创建一个实例Model::create([]),但是可以保存到数据库中.如果可能的话,我想创建一堆模型,然后只创建一个最好的模型.
这可能吗?
我正在使用Laravel 5.0
我有一个名为Surface的Eloquent模型,它依赖于ZipCodeRepository对象:
class Surface extends Model{
public function __construct(ZipCodeRepositoryInterface $zipCode){...}
Run Code Online (Sandbox Code Playgroud)
和一个具有多个曲面的Address对象.
class Address extends Model{
public surfaces() { return $this->hasMany('App/Surface'); }
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我打电话时,$address->surfaces我收到以下错误:
Argument 1 passed to App\Surface::__construct() must be an instance of App\Repositories\ZipCodeRepositoryInterface, none given
Run Code Online (Sandbox Code Playgroud)
我以为IoC会自动注入它.
我使用的是Laravel-5.0的默认Authentication中间件,但是我更改了handle函数的签名:
public function handle($request, Closure $next, AuthClientInterface $authClient)
Run Code Online (Sandbox Code Playgroud)
我还在AuthClientInterface服务提供商处注册了:
public function register()
{
$this->app->bind('App\Services\Contracts\AuthClientInterface', function()
{
return new AuthClient(
env('AUTH_SERVER_URL'),
env('AUTH_SESSION_URL'),
env('AUTH_CLIENT_ID')
);
});
}
Run Code Online (Sandbox Code Playgroud)
但是,尽管如此,我看到以下错误:
Argument 3 passed to HelioQuote\Http\Middleware\Authenticate::handle()
must be an instance of
HelioQuote\Services\Contracts\HelioAuthClientInterface, none given,
called in C:\MyApp\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php on line 125 and defined...
Run Code Online (Sandbox Code Playgroud)
谁能看到我做错了什么?
编辑:我确实通过将HelioAuthClientInterface传递给中间件的构造函数来实现它.但是我认为除了构造函数之外,IoC容器还会向方法注入依赖项.
从Tinker内部我想:
>>> Auth::loginUsingId(12);
=> false
>>> Auth::user();
=> null
>>> Auth::attempt(['email' => 'my@email.com']);
=> false
Run Code Online (Sandbox Code Playgroud)
我猜测,因为Auth通常使用会话数据,也许会话不适用于修补程序.
是否可以在修补程序中进行身份验证?
我的单元测试最近开始失败.我收到此错误:
PDOException: SQLSTATE[HY000]:
General error: 1 table loan_details has no column named start_month
Run Code Online (Sandbox Code Playgroud)
它发生的地方,我有这个代码:
$loan = LoanDetails::create(['loan_percentage' => .8,
'loan_product_id' => 1,
'interest_rate' => .5,
'start_month' => 0,
'term' => 120,
'fixed_finance_fee' => 0,
'variable_finance_Fee' => 0,
'valid_from' => '2015-01-01'
]);
Run Code Online (Sandbox Code Playgroud)
如果我注释掉"start_month"行,那么它在逻辑上是有效的.
在我的单元测试的设置中,我运行所有迁移(大约80).
我的迁移看起来像这样:
Schema::table('loan_details', function(Blueprint $table){
$table->integer('start_month')->unsigned()->after('interest_only')->default(0);
$table->decimal('balloon_percent',4,3)->after('term')->nullable();
$table->integer('balloon_month')->after('balloon_percent')->nullable();
$table->dropColumn('ordinal_rank');
});
Run Code Online (Sandbox Code Playgroud)
所以,我想知道是否所有迁移都没有运行,所以我运行了这段代码:
$rows = DB::table('migrations')->get();
print_r($rows);
Run Code Online (Sandbox Code Playgroud)
这会将所有迁移列为已完成.我在内存中使用sqlite db进行测试.
我想知道迁移是否是异步运行的,并且在我的代码运行时它们都没有完成?或者,如果迁移在某处静默失败?
我已经在这几个小时了,不知道发生了什么.
*更新我有一个在上述迁移后运行的迁移,我确认后续迁移成功.因此,正是这一次迁移以某种方式无声地失败.
我正在使用java来获取屏幕的尺寸和分辨率.当我运行以下代码时,我得到下面的输出.
Toolkit toolkit = Toolkit.getDefaultToolkit ();
Dimension dim = toolkit.getScreenSize();
System.out.println("Width of Screen Size is "+dim.width+" pixels");
System.out.println("Height of Screen Size is "+dim.height+" pixels");
int resolution =Toolkit.getDefaultToolkit().getScreenResolution();
System.out.println(resolution);
Run Code Online (Sandbox Code Playgroud)
输出:
Width of Screen Size is 1920 pixels
Height of Screen Size is 1080 pixels
120
Run Code Online (Sandbox Code Playgroud)
现在Javadoc说getScreenResolution以dpi(每英寸点数)返回分辨率.我认为这意味着如果我的图像宽度为600像素,那么屏幕上的图像将为5英寸.当我测量时,它实际上是4英寸宽.告诉我它应该是150 dpi.
我的显示器是一个15.6英寸的显示器,我测量它的宽度为13.6英寸,高度超过7.6英寸.现在我的屏幕宽度显然是1920像素宽,计算到每英寸约141像素.同样1080/7.6计算至每英寸约141个像素.
此网页显示600x600像素的图像.我在屏幕上测量它为4.25",计算到141像素.
为什么getScreenResolution返回120?
如果我误解了这一点,请告诉我.
我有以下表格(为简单起见,省略了其他表格).1代表所有人,2代表那些人玩的运动.我使用PHP来允许用户查看人员列表.他们可以根据一个人的名字或他们玩的运动来过滤.所以,我希望能够看到所有玩棒球和足球的人.
create table people (
id int,
name varchar(50)
);
create table people_to_sports (
personID int,
sportID int,
primary key(personID,sportID)
);
Run Code Online (Sandbox Code Playgroud)
基本上我的问题是,我如何使用people_to_sports来获取所有参加运动1和运动2的人的列表?
我这里有一个sqlfiddle .
谢谢!
我有一个使用 Celery 的项目。我定期遇到这样一种情况,我的请求正在向 Celery 发送,但任务没有交给工作人员,而服务器只是返回 500 错误。
当我重新启动 Celery 时,它又开始工作了。我只是猜测工人正在挂起,这使得它不再有可用的工人。如果我启动另一批工作人员,请求将再次开始工作(这支持我的理论)。
问题:
我正在使用Google的php api客户端。我正在浏览服务帐户快速入门指南。据我所知,我完美地遵循了这些步骤。我遇到以下错误:
{
"error": "invalid_grant",
"error_description": "Invalid JWT: Token must be a short-lived token (60 minutes) and in a reasonable timeframe. Check your iat and exp values and use a clock with skew to account for clock differences between systems."
}
Run Code Online (Sandbox Code Playgroud)
据我了解,此错误最常见的问题是系统时间是否错误。我已经三重检查了我的时区,日期和时间是否与原子钟同步。我使用php set timezone函数来设置我的时区以匹配我的计算机,但是我继续遇到错误。我正在查看消息的另一部分,其中提到了iat和exp设置,但还没有到位。
有谁对我如何超越这个有任何想法?
我创建了一个OptionDialog没有任何按钮的项目,并JPanel在其中放入了一个用于MigLayout其布局的项目。那里面JPanel还有另一个。JPanel
这两个面板的外侧似乎都有边距。也许它是容器上的填充物。不管怎样,我想要一种摆脱它们的方法。
我怎样才能摆脱这些边距?在图片中,它们是 JPanel 周围的灰色和深橙色边框。

这是面板代码:
setBackground(new Color(239,209,59));
setLayout(new MigLayout("wrap 1"));
JLabel title = new JLabel("Enroll Today!", JLabel.CENTER);
Font f = title.getFont().deriveFont((float)36);
title.setFont(f);
add(title);
JPanel docsPanel = new JPanel();
docsPanel.setBorder(BorderFactory.createEmptyBorder());
docsPanel.setLayout(new MigLayout("wrap 1", "", "[grow,fill]"));
docsPanel.setBackground(new Color(255,235,115));
for (final Document d : docs){
JButton doc = new JButton("* "+d.getName());
doc.setFont(f.deriveFont((float)24));
doc.setBorder(null);
doc.setContentAreaFilled(false);
docsPanel.add(doc);
}
add(docsPanel);
Run Code Online (Sandbox Code Playgroud)
这是选项对话框代码:
DocumentPanel panel = new DocumentPanel(controller.getDocuments());
JOptionPane.showOptionDialog(null, panel, "Enroll now!", JOptionPane.DEFAULT_OPTION,
JOptionPane.PLAIN_MESSAGE, null, new Object[] {}, …Run Code Online (Sandbox Code Playgroud) 我有几个插入语句,我只想在它们为真时执行。
这是我的例子:
START TRANSACTION;
INSERT INTO fields (field_name, control_type_id, needs_approval)
VALUES
('Array Photos', 3, 0);
INSERT INTO field_to_job_type (field_id, job_type_id, sequence_number, parent_id)
VALUES
(last_insert_id(), (SELECT job_type_id FROM job_types WHERE job_type_name = 'Cash'), 1, (SELECT field_id FROM fields where field_name = 'Photo Pack'));
COMMIT;
Run Code Online (Sandbox Code Playgroud)
现在,如果此查询只有 1 个结果,我真的只想运行第二个查询:
SELECT job_type_id FROM job_types WHERE job_type_name = 'Cash'.
如果该查询返回 2 个结果,我想放弃交易。
那可能吗?我试过的东西:
START TRANSACTION;
INSERT ...;
INSERT ...;
IF(SELECT count(job_type_name) FROM job_types WHERE job_type_name = 'Cash') = 1, 'COMMIT', 'ROLLBACK');
Run Code Online (Sandbox Code Playgroud)
哪个,显然没有用。
我正在使用 Laravel 5.0。
我有这个:
return User::whereRaw("CONCAT(first_name, ' ', last_name) LIKE '%?%'", ['test'])->get();
Run Code Online (Sandbox Code Playgroud)
它返回了[]。
当我将其更改为:
return User::whereRaw("CONCAT(first_name, ' ', last_name) LIKE '%test%'")->get();
Run Code Online (Sandbox Code Playgroud)
它返回一个包含 3 个用户的数组。
我在查询之前添加了这个:
\DB::listen(function($sql, $bindings) {
var_dump($sql);
var_dump($bindings);
});
Run Code Online (Sandbox Code Playgroud)
我得到:
string(73) "select * from `users` where CONCAT(first_name, ' ', last_name) LIKE '%?%'"
array(1) {
[0]=>
string(4) "test"
}
Run Code Online (Sandbox Code Playgroud)
我不明白我做错了什么。
laravel ×4
laravel-5 ×4
php ×3
java ×2
mysql ×2
awt ×1
celery ×1
filter ×1
github ×1
google-api ×1
jpanel ×1
laravel-5.3 ×1
middleware ×1
miglayout ×1
sql ×1
sqlite ×1
swing ×1
tinker ×1
transactions ×1