我可以使用像这样的Phalcon ORM在相关表格上找到数据吗?
assembly: ExportRenderer(typeof(StreetView), typeof(StreetViewRenderer))]
namespace Yournamespace.iOS.Renderer
{
public class StreetViewRenderer : ViewRenderer<StreetView, PanoramaView>
{
PanoramaView panoramaView;
protected override void OnElementChanged(ElementChangedEventArgs<StreetView> e)
{
base.OnElementChanged(e);
if (Control == null)
{
CGRect rect = new CGRect(0, 0, App.ScreenWidth, App.ScreenHeight);
panoramaView = new PanoramaView(rect);
SetNativeControl(panoramaView);
if (SharedSystem.Current.CurrentVehicle.PlateNumber == null)
{
SetCoordinate(40.968845, 29.065849);
}
else
SetCoordinate(SharedSystem.Current.CurrentVehicle.DeviceLatitude.Value, SharedSystem.Current.CurrentVehicle.DeviceLongitude.Value);
}
if (e.OldElement != null)
{
// Unsubscribe
panoramaView.DidMoveToPanoramaNearCoordinate -= PanoramaView_DidMoveToPanoramaNearCoordinate;
MessagingCenter.Unsubscribe<Vehicle>(this, "SelectedPin");
}
if (e.NewElement != null)
{
// Subscribes
MessagingCenter.Subscribe<Vehicle>(this, "SelectedPin", (sender) =>
{
if(SharedSystem.Current.CurrentVehicle.PlateNumber == sender.PlateNumber)
SetCoordinate(sender.DeviceLatitude.Value,sender.DeviceLongitude.Value);
});
MessagingCenter.Subscribe<Vehicle>(this, "ScrollToVehicle", (sender) =>
{
if (SharedSystem.Current.CurrentVehicle.PlateNumber == sender.PlateNumber)
SetCoordinate(sender.DeviceLatitude.Value, sender.DeviceLongitude.Value);
});
panoramaView.DidMoveToPanoramaNearCoordinate += PanoramaView_DidMoveToPanoramaNearCoordinate;
}
}
public void SetCoordinate(double latitude, double longitude)
{
Device.BeginInvokeOnMainThread(() =>
{
CLLocationCoordinate2D location = new CLLocationCoordinate2D(latitude, longitude);
panoramaView.MoveNearCoordinate(location);
});
}
void PanoramaView_DidMoveToPanoramaNearCoordinate(object sender, GMSPanoramaDidMoveToPanoramaNearCoordinateEventArgs e)
{
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
Control.Dispose();
}
base.Dispose(disposing);
}
}
以前我在Phalcon ORM中使用过它
SELECT *
FROM user
LEFT JOIN media_manager ON media_manager.user_id = user.id
WHERE media_manager.upload_date > '2017-01-01';
但我不知道如何在MediaManager中找到像PDO一样的数据。
答案 0 :(得分:1)
我不认为Phalcon ORM足够强大,允许您在find
的条件部分指定此类内容,除非您通过添加leftJoin
来构建此类内容一路上所以条件可以参考它。你可以对模型的initialize
中发生的事情以及调整Phalcon以满足你的需求有所了解,但是ORM会在PHP中循环,而不是用查询来做。 ORM不是SQL的替代品,我强烈建议在SQL中执行此类操作,而不是在PHP中循环它。
我个人会通过向你的模型添加一个新的静态方法来解决这个问题,你可以通过允许leftJoins以一种特殊的方式“找到”。对我来说,这似乎是一个很好的解决方案:How to run RAW SQL query in PhalconPHP 然后你只需调整那里的查询并放置LEFT JOIN。
换句话说:
<?php
use Phalcon\Mvc\Model\Resultset\Simple as Resultset;
class User extends Phalcon\Mvc\Model
{
public static function advancedFind($conditions = 1, $params = null)
{
$sql = "SELECT u.*,m.* FROM user u LEFT JOIN media_manager m ON m.user_id = u.id
WHERE $conditions";
// Base model
$user = new User();
// Execute the query
return new Resultset(null, $user, $user->getReadConnection()->query($sql, $params));
}
}
然后你会做类似的事情:
$data = User::advancedFind("m.upload_date > '2017-01-01'");